我很难理解CherryPy中的会话

时间:2012-07-26 19:26:54

标签: python cherrypy

我最近开始了一个将我们的网络应用程序从apache + Mod_python迁移到cherry-py的项目。

我仍然需要做很多事情,但就目前而言,正是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')

最终结果是'测试'仍显示在屏幕上。是否发生这种情况是因为客户端会话已过期,但本地会话仍有数据?在这种情况下,我如何检查会话是否过期?

很抱歉这个令人困惑的问题,但我很困惑。

感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

尝试此操作以结束会话。

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

并尝试创建会话...

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

我使用此示例来处理我的大多数会话活动。

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

希望这有帮助,

安德鲁