Python Cherrypy会话超时问题

Python Cherrypy会话超时问题,python,cherrypy,Python,Cherrypy,关于cherrypy会话超时的两个问题: 1) 有没有办法确定会话中的剩余时间?这与尝试使用 2) 有没有一种方法可以调用cherrypy而不重置超时,这样上面的插件就可以调用URL来确定会话中剩余的时间而不重置所述时间 编辑以帮助澄清:这里的目的是使客户端进程能够通过AJAX定期查询服务器,以确定用户会话中剩余的时间。这是为了克服保持客户端会话超时计时器与服务器端计时器同步的困难——我只想让客户端询问服务器“我还剩多少时间?”并采取相应的行动。当然,如果请求的行为重置了超时,那么这将不起作用,

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

1) 有没有办法确定会话中的剩余时间?这与尝试使用

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


编辑以帮助澄清:这里的目的是使客户端进程能够通过AJAX定期查询服务器,以确定用户会话中剩余的时间。这是为了克服保持客户端会话超时计时器与服务器端计时器同步的困难——我只想让客户端询问服务器“我还剩多少时间?”并采取相应的行动。当然,如果请求的行为重置了超时,那么这将不起作用,因为AJAX“剩余时间”请求实际上将成为一个保持活动状态的会话。因此,我需要能够在不重置用户会话超时计时器的情况下向服务器进行AJAX查询。

我相信cherrypy使用cookie中的过期时间和密钥会话id。我的说明是:

Wed 22 Jan 2014 03:44:31 PM EST
您可以使用一组环境延长过期时间,并编辑会话cookie

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

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


希望这有帮助

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

在阅读cherrypy会话类的源代码时,我找到了问题的答案。显然,您不希望在提供此类请求后保存会话—这样也不会更新过期时间(也不会保存对会话对象的任何更改)

我在源代码中发现设置
cherrypy.service.request.\u 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

只需在方法定义之前添加
@nosessionsave

是,过期时间在cookie中。。这有帮助,但没有解决第2点:防止超时被重置。除非您是说在返回的cookie中显式设置会话id密钥的过期时间将更改超时?所以,如果我想让某人有一个超长的超时时间,我可以简单地在每次调用后将其设置为某个遥远的未来值?这是正确的。延长cookie的过期时间将延长服务器端会话数据的过期时间。不确定您是如何做到的。默认情况下,清理线程每5分钟删除一次过期会话。此外,当为请求加载会话时,会检查过期时间。“CherryPy默认为60分钟会话超时”clean_freq将默认每5分钟运行一次,以清除超过60分钟的会话。您还可以在配置文件中设置:tools.sessions.timeout=2880