gpt4 book ai didi

java - 如果有对象引用,Java Session 会过期吗?

转载 作者:行者123 更新时间:2023-11-30 07:11:57 24 4
gpt4 key购买 nike

假设我有一个 Java Web 应用程序,并将 session 超时设置为 10 分钟。我还有一个Collection<HttpSession>在我的 servlet 上下文中,它存储所有当前存在的 session (忽略该集合的非/有用性)。通过这种设置,Session 对象真的会过期吗?该集合将在整个应用程序的生命周期中存在,并保存对每个 session 的引用。

  1. 如果 session 确实过期,那么如果我稍后尝试访问该 session 会发生什么情况?我会得到(n)(空指针​​)异常吗?或者 session 是否已被回收,因此我无法访问我认为是的 session ?
  2. 如果 session 不能再过期,我可以采取什么措施来解决这个问题?
  3. 对于每个不同的 servlet 容器(tomcat、jboss、jetty...),此行为是否有所不同,或者或多或少一致?

最佳答案

作为一名 Web 开发人员,当 Web 容器执行类似(甚至更多)的操作时,尚不清楚为什么您要在集合中维护 session 。由于您通常通过 HttpServletRequest 对象从容器请求 session ,即使您维护了另一个对它的引用(以便可能防止它被垃圾回收),Web 容器也不知道它,因此 session 将过期(从最直接的意义上来说)。

If a session DOES expire, then what happens if I try to access the session at a later time?

Web 容器(例如 Tomcat)维护请求的 session 。考虑到 cookie 管理 session ,每个请求都会将相同的 cookie 发送到同一服务器,因此 Web 容器会安排查找 session 并将其从请求对象返回给您。请参阅getSession() API 。在这里,根据参数的值,您可以从 Web 容器请求新的或现有的 session 。

Do I get a(n) (null pointer) Exception?

也许吧。请参阅上面的 API( boolean 参数 getSession 已重载)。

Or could the session already be recycled and thus I'm not accessing the session I think I was?

是的,这是完全可能的。如果 session 过期(例如,在一段不活动之后),因为您要求 Web 容器使其过期,所以您已经丢失了它(可以这么说)。

If a session CAN NO LONGER EXPIRE, what can I do to remedy this?

这很奇怪,但是基于 Web 容器实现是可能的。所有 Web 容器(应该)提供一个配置来帮助配置默认 session 超时(我认为 servlet 规范提供了默认值)。 session 超时没有过期是相当不安全的。检查 Web 容器的文档以了解如何配置它。应该有一种方法来限制 session 的有效性。

Does this behaviour differ for each different servlet container env(tomcat, jboss, jetty...) or is it more or less consistent?

session 和 session 超时的概念在容器中是相同的,因为它与 HTTP 相关并且是 servlet 规范的一部分。每个容器都有其文档来配置其默认 session 超时。

关于java - 如果有对象引用,Java Session 会过期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39089429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com