我最近开始了一个将我们的web应用程序从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.
Run Code Online (Sandbox Code Playgroud)
从CherryPy文档来看,启动会话所需要做的就是通过添加如下内容来修改配置:
cherrypy.config.update({
'tools.sessions.on': True,
'tools.sessions.storage_type': 'ram'})
Run Code Online (Sandbox Code Playgroud)
以上默认为60分钟的时间(虽然您可以手动设置自己的),但是如果我想销毁该会话并创建一个新会话呢?做,我打电话给cherrypy.lib.sessions.expire()任意文件然后再做cherrypy.config.update一次?或者,CherryPy会自行创建一个新会话吗?如果我想使用不同的到期时间进行新会话怎么办?
注意:当我说任意文件时,我的意思是一个没有运行CherryPy的文件(我的"配置"文件导入并从我们的其他页面获取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')
Run Code Online (Sandbox Code Playgroud)
最终结果是"测试"仍显示在屏幕上.是否发生这种情况是因为客户端会话已过期,但本地会话仍有数据?在这种情况下,我如何检查会话是否过期?
抱歉这个令人困惑的问题,但我很困惑.
感谢你的帮助!
试试这个结束会话.
sess = cherrypy.session
sess['_cp_username'] = None
Run Code Online (Sandbox Code Playgroud)
并尝试这个来创建一个会话......
cherrypy.session.regenerate()
cherrypy.session['_cp_username'] = cherrypy.request.login
Run Code Online (Sandbox Code Playgroud)
我用这个例子来处理我的大部分会话活动.
http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions
希望这可以帮助,
安德鲁
| 归档时间: |
|
| 查看次数: |
6916 次 |
| 最近记录: |