【问题标题】:Grails / Ext js: Make request without extending the session (Session Timeout)Grails / Ext js:在不延长会话的情况下发出请求(会话超时)
【发布时间】:2014-07-02 02:59:43
【问题描述】:

我需要您就如何解决这个问题提出建议。我在服务器上有一个带有spring security的grails webservice,在客户端上有一个ext js网页。会话超时 (web.xml) 为 30 分钟,在该时间不活动之后,用户被成功记录。

现在我需要从客户端(ajax)轮询以从服务器获取新信息。这每 2 分钟在后台发生一次。 (这里有推送服务很好,但我现在不能使用它......)

由于 2 分钟的请求间隔,永远不会达到 30 分钟的超时,并且永远不会自动注销用户。

  • 我在客户端使用会话 cookie,每次请求都会将其传输到服务器。
  • 在这个特定的 ajax 请求中,我还添加了 BasicAuthentication 参数,以防止 Spring Security 使用请求中的会话 ID - 但这不起作用。
  • 无法从此请求中删除 JSESSION ID,它始终由浏览器添加。

如何在不扩展会话的情况下创建 ajax 请求?

问候, 圣杯粉丝

【问题讨论】:

    标签: javascript ajax spring session grails


    【解决方案1】:

    一般你不能。创建会话后,当有请求进入时,它总是会更新 (lastAccessTime)。

    您必须自己实现此功能。我做了几次,没那么难。

    这个想法是,您使用 Grails before-Filter 内的 System.currentTimeMillis() 更新 session.lastAccessMillis。更新应该只发生在非 XHR 请求上。然后,您还要检查,如果这样的请求来得太晚,否则会使会话无效。

    类似

    class SessionTimeoutFilters {
    
      def filters = {
    
        all( uri:'/**' ){
    
          before = {
            if( request.xhr ) return
            long now = System.currentTimeMillis()
            if( !session.lastAccessMillis || TIMEOUT < now - session.lastAccessMillis )
              session.lastAccessMillis = now
            else
              session.invalidate()
            }
          }
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      来自injecteer's answer,线路:

      TIMEOUT < now - session.lastAccessMillis
      

      应该是:

      TIMEOUT > now - session.lastAccessMillis
      

      class SessionTimeoutFilters {
      
        def filters = {
      
          all( uri:'/**' ){
      
            before = {
              if( request.xhr ) return
              long now = System.currentTimeMillis()
              if( !session.lastAccessMillis || TIMEOUT > now - session.lastAccessMillis )
                session.lastAccessMillis = now
              else
                session.invalidate()
              }
            }
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-08
        • 2016-04-02
        • 2015-11-08
        • 1970-01-01
        • 2020-09-10
        • 2011-01-17
        • 1970-01-01
        • 2011-04-17
        相关资源
        最近更新 更多