代码之家  ›  专栏  ›  技术社区  ›  Sam YC

javaee如何延长会话生存期/超时

  •  0
  • Sam YC  · 技术社区  · 6 年前

    我有一个javaee会话,如果空闲,它会在10分钟内超时。我知道任何命中服务器的请求都将使其“不空闲”,并且其会话将被刷新。

    1) 是因为它检测到了cookies的存在吗( JSESSIONID )在HTTP请求头中?

    2) request.getSession() request.getSession(false) 下面有什么把戏吗?

    我找了很多帖子都找不到任何细节。

    为什么我要知道这一点,是因为我遇到了一个问题。我有一个10分钟后就会超时的应用程序。但我也有一个轮询ajax在几秒钟后定期运行。也就是说,我的会话永远不会过期/超时。ajax轮询包含cookies( ),但我不确定是否是主要原因,因为我有可能调用的Spring安全过滤器 request.getSession 对于每个HTTP请求。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sam YC    6 年前

    经过一段时间的搜索,我认为没有绝对的答案,因为它取决于个人的实现。

    根据我在servlet-4-final-spec上找到的规范:

    7.6上次访问时间

    在当前请求之前访问了会话。会议结束了 当请求是会话的一部分时被认为是被访问的 首先由servlet容器处理。

    所以我去找野猫 implementation

    long getLastAccessedTime()

    会话,作为自1970年1月1日午夜以来的毫秒数 GMT,并由容器接收请求的时间标记。 应用程序执行的操作,例如获取或设置 与会话关联的值,不影响访问时间。

    仍然不是很清楚,它说的是“与会话相关的值”,但没有说 getSession .

    然后我发现 this :

    org.apache.catalina.core.StandardHostValve.ACCESS\u会话

    如果这是真的,那么与会话关联的每个请求都将 使会话的上次访问时间得到更新,而不管 请求是否显式访问会话。否则默认值为

    所以对于Tomcat,默认情况下,我们必须显式调用 request.getSession

    参考文献:

    When session is considered accessed

    2) http://tomcat.10.x6.nabble.com/Session-timeouts-ignore-quot-periodic-polling-quot-URL-td2159572.html