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

时间:2014-02-25 11:00:06

标签: java servlets httpsession

我继承的一些代码使用此行创建会话:

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

在app的配置中,session-config的值设置为10(分钟)。

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

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

并使其无效:

  • req.getSession()无效();

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

因此。我的问题是超时设置我会期望失败。至少是这一行:

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

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

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

谢谢

- Justin Wyllie

3 个答案:

答案 0 :(得分:2)

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

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

如果你想要“失败的东西”,你可以尝试在会话中添加一个值(使用setAttribute()方法),并在失效后检查它是否存在。

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

答案 1 :(得分:0)

req.getSession()

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

仔细观察定义的第一部分,我猜想与“this”请求对象关联的会话对象仍然不是空的。即使它会返回一个新的“对象”,当然是“NOT-NULL”。

答案 2 :(得分:0)

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