我需要您如何解决此问题的建议。我在服务器上有一个带有grails安全性的grails Web服务,在客户端上有ext js网页。 session 超时(web.xml)为30分钟,并且在闲置时间之后,用户已成功登录。

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

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

  • 我在客户端使用 session cookie,该 session cookie随每个请求传送到服务器。
  • 在这个特定的ajax请求中,我还添加了BasicAuthentication参数,以防止spring security使用请求中的 session ID-但这不起作用。
  • 无法从此请求中删除JSESSION ID,它始终由浏览器添加。

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

    问候,
    格雷斯范

    请您参考如下方法:

    一般来说,你不能。创建 session 后,当收到请求时,它将始终更新(lastAccessTime)。

    您将必须自己实现此功能。我做了几次,并不难。

    这个想法是,您使用System.currentTimeMillis()内的Grails before-Filter更新session.lastAccessMillis。更新仅应针对非XHR请求进行。然后,您还检查这种请求是否来得太晚,否则会使 session 无效。

    就像是

    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() 
            } 
          } 
        } 
      } 
    } 
    


    评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!