【问题标题】:Cherrypy Session Timeout questionsCherrypy 会话超时问题
【发布时间】:2014-01-21 20:57:31
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python cherrypy


    【解决方案1】:

    我相信cherrypy使用cookie中的过期时间和key session_id。我的说:

    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

    希望这会有所帮助!

    【讨论】:

    • 是的,过期时间在 cookie 中。docs.cherrypy.org/dev/refman/lib/…
    • 这有帮助,但不能解决第 2 点:防止超时被重置。除非你说在返回的 cookie 中显式设置 session_id 键的过期时间会改变超时时间?因此,如果我希望某人有一个超长的超时时间,我可以在每次通话后简单地将其设置为某个遥远的未来值?
    • 没错。延长 cookie 的过期时间将延长服务器端会话数据的过期时间。
    • 不知道你是怎么做到的。默认情况下,清理线程每 5 分钟删除一次过期会话。此外,当为请求加载会话时,会检查过期时间。
    • “CherryPy 默认为 60 分钟会话超时”docs.cherrypy.org/stable/refman/lib/… clean_freq 默认每 5 分钟运行一次,以清除超过 60 分钟的会话。也可以在配置文件中设置:tools.sessions.timeout = 2880
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我在浏览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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-24
        • 2017-12-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多