2012-07-26 40 views
3

我最近開始一個項目,將我們的web應用程序從apache + mod_python遷移到cherry-py。我很努力去理解CherryPy中的會話

我仍然需要做很多事情,但現在,CherryPy的會議讓我感到頭疼。

我的第一個問題是他們是如何工作的?

在mod_python中,我們做這樣的事情:

... 
from mod_python import Session 
sess = Session.Session(req, timeout = 60*60, lock=0) 
#req is the request page object. 

從CherryPy的文檔來看,所有我需要做啓動一個會話是通過增加類似如下的修改配置:

cherrypy.config.update({ 
    'tools.sessions.on': True, 
    'tools.sessions.storage_type': 'ram'}) 

上面的默認時間爲60分鐘(儘管您可以手動設置自己的),但是如果我想要銷燬該會話並創建一個新會話,該怎麼辦?那麼,我打電話cherrypy.lib.sessions.expire()在任何任意文件,然後再做cherrypy.config.update事情?或者,CherryPy會自己做一個新的會話嗎?如果我想以不同的到期時間進行新的會話,該怎麼辦?

注意:當我說任意文件時,我的意思是一個沒有運行CherryPy的文件(我的「config」文件導入並從我們的其他頁面獲取html,就像Mod_Python附帶的標準Publisher一樣)。

我試圖使一個小巧的測試文件:

import cherrypy 
from cherrypy.lib import sessions 

def index(sid=0, secret=None, timeout=30, lock=1): 
    cherrypy.session['test'] = 'test' 
    cherrypy.lib.sessions.expire() 
    return cherrypy.session.get('test','None') 

最終的結果是,「測試」仍然顯示在屏幕上。發生這種情況是因爲客戶端會話已過期,但本地仍然有數據?在這種情況下,我該如何檢查會話是否過期?

對不起,令人困惑的問題,但我很困惑。

感謝您的幫助!

回答

8

試試這個來結束一個會話。

sess = cherrypy.session 
sess['_cp_username'] = None 

,並嘗試此創建一個會話...

cherrypy.session.regenerate() 
cherrypy.session['_cp_username'] = cherrypy.request.login 

我用這個例子來處理我的大部分會話活動。

http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions

希望這有助於

安德魯