【问题标题】:HttpSession and JBoss. What is the effect of the session timing out?HttpSession 和 JBoss。会话超时的影响是什么?
【发布时间】:2014-03-27 13:18:57
【问题描述】:

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

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

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

之后关于session的唯一用途就是获取session id:

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

并使其无效:

  • req.getSession().invalidate();

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

所以。我的问题是超时设置,我希望有些事情会失败。至少一行:

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

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

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

感谢

--贾斯汀·威利

【问题讨论】:

    标签: java servlets httpsession


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 尽管 session-config 设置为 10 分钟,但如果我这样调用: sid = req.getSession().getId();在 0 分钟,然后在 30 分钟,我仍然得到相同的 sid 值。所以。会话还没有过期?谢谢。
    【解决方案2】:
    req.getSession()
    

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 2011-09-25
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        • 1970-01-01
        • 2013-01-19
        相关资源
        最近更新 更多