我很难理解在CherryPy的会话

2024-05-02 05:00:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我还有很多事情要做,但现在,切里皮的治疗让我有点头疼。

我的第一个问题是它们是如何工作的?

在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附带的标准发布程序一样)。

我试着做一个快速的小测试文件:

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')

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

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

谢谢你的帮助!


Tags: 文件fromtestimportmodconfiglocksession
1条回答
网友
1楼 · 发布于 2024-05-02 05:00:55

尝试此操作结束会话。

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

尝试创建会话。。。

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

我用这个例子来处理我的大部分会话活动。

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

希望能帮上忙

安德鲁

相关问题 更多 >