HttpSession 和 JBoss.会话超时的影响是什么



我继承的一些代码使用以下行创建了一个会话:

HttpSession session = req.getSession(); //req is an instance of HTTPServletRequest

在应用程序的配置中,会话配置的值设置为 10(分钟)。

之后,会话的唯一用途是获取会话 ID:

String sid = req.getSession().getId();

并使其无效:

  • req.getSession().invalidate();

会话不用于存储用户数据。这一切都是由数据库表中的Perl脚本完成的,只是使用HttpSession创建的sid作为标识符。(有点像应用程序的怪物)。

所以。我的问题给定了超时设置,我希望某些事情会失败。至少是这样一行:

字符串 sid = req.getSession().getId();

会在 10 分钟后返回空字符串吗?

然而,尽管超时设置为 10 分钟,但这一切似乎都继续得很愉快。这是为什么呢?

谢谢

-

-贾斯汀·威利

如果会话因超时或代码而无效,则在执行request.getSession()时,将创建新会话。您可以通过比较两个 id 的值来检查这一点。

如果不希望 getSession() 方法在未创建新会话的情况下创建新会话,则可以将其作为参数传递false

如果您希望"某些内容失败",您可以尝试向会话添加一个值(使用 setAttribute() 方法),并在失效后检查它是否存在。

http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

req.getSession()

返回与此请求关联的当前 Http会话,或者,如果没有当前会话并且 create 为 true,则返回新会话。

仔细查看定义的第一部分,我猜与"this"请求对象关联的会话对象仍然不为空。即使它是,它也会返回一个新的"对象",当然是"NOT-NULL"。

@Justin Wyllie : 试试HttpSession session = req.getSession(false);

最新更新