2012-07-26 45 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

希望这有助于

安德鲁