Cherrypy会话超时问题

时间:2014-01-21 20:57:32

标签: python cherrypy

关于cherrypy会话超时的两个问题:

1)有没有办法确定会话中的剩余时间?这与尝试使用http://plugins.jquery.com/epilgrim.sessionTimeoutHandler/

有关

2)有没有办法调用cherrypy不重置超时,这样上面的插件可以调用URL来确定会话剩余时间而不重置上述时间

编辑以帮助澄清:此处的目的是能够拥有一个客户端进程,该进程通过AJAX定期查询服务器以确定用户会话中剩余的时间量。这是为了克服保持客户端会话超时计时器与服务器端计时器同步的困难 - 我想让客户端询问服务器“我还剩多少时间?”并采取相应行动。当然,如果要求的行为重置超时,那么这将不起作用,因为AJAX“剩余时间”请求将基本上成为会话保持活动。因此,我需要能够向服务器发出AJAX查询,而无需为用户重置会话超时计时器。

3 个答案:

答案 0 :(得分:1)

我相信cherrypy使用密钥session_id在cookie中使用到期时间。我说:

Wed 22 Jan 2014 03:44:31 PM EST

您可以根据您的情况延长过期时间并编辑会话cookie。

编辑:您还需要延长服务器超时时间......

cherrypy.request.config.update({'tools.sessions.timeout': 60}) 

https://groups.google.com/forum/#!topic/cherrypy-users/2yrG79QoYFQ

希望这有帮助!

答案 1 :(得分:0)

您需要对会话进行子类化并为其添加“stats”函数和一个标志,以防止在会话“stats”请求处理程序中保存。或者在配置中禁用“stats”路径中的会话,并直接从存储加载会话exp信息,而不使用正常的会话类。

答案 2 :(得分:0)

我在浏览cherrypy会话类的源代码时找到了2)问题的答案。显然,您不希望在处理此类请求后保存会话 - 这也不会更新过期时间(并且不会保存对会话对象的任何更改)。

我在源代码中发现设置 cherrypy.serving.request._sessionsaved = True 就是这样做的。并添加了装饰器以方便使用:

def nosessionsave( func ):
"""
Decorator to avoid session saving and thus not resetting session timeout.
"""
def decorate( *args, **data ):
    cherrypy.serving.request._sessionsaved = True
    return func( *args, **data )
return decorate

只需在方法 def 前添加 @nosessionsave