【问题标题】:J2EE -- Handling HttpSession session timouts while serving flash contentJ2EE——在提供 Flash 内容时处理 HttpSession 会话超时
【发布时间】:2010-02-18 16:14:47
【问题描述】:

在提供基于 Flash 的培训材料时,用户会周期性地遇到 HttpSession 会话超时。目前不活动超时设置为默认值(30 分钟)。

问题:

  1. 对于请求训练 Flash 视频以防止超时的任何用户,尝试增加 MaxInactiveInterval 是否是个好主意?

  2. 如果 HttpSession 与查看培训内容相关联,那么更好的方法是使用 servlet 生命周期侦听器重新激活 HttpSession 吗? -- 这可以更精确地控制 HttpSession 对象何时超时。

  3. 实际上只有一小部分用户会在任何时候查看此材料,这样做是否应该考虑性能损失?

【问题讨论】:

    标签: java servlets session-timeout


    【解决方案1】:

    在后台触发 ajax 投票。

    这是一个SSCCE,在jQuery 的帮助下。只需复制'n'粘贴'n'运行它(并更改 flash 对象以适合您的实际代码)。

    <!doctype html>
    <html lang="en">
        <head>
            <title>SO question 2290101</title>
            <script src="http://code.jquery.com/jquery-latest.min.js"></script>
            <script>
                $(document).ready(function() {
                    setInterval(function() {
                        $.get('poll');
                    }, ${(pageContext.session.maxInactiveInterval - 10) * 1000});
                });
            </script>
        </head>
        <body>
            <object type="application/x-shockwave-flash" ... >
                ...
            </object>
        </body>
    </html>
    

    这里${pageContext.session.maxInactiveInterval} 返回会话尚未存在的剩余秒数(并且被缩短了一点 - 只是为了及时轮询 - 并转换为毫秒,以便它适合 setInterval() 的期望)。 $.get('poll') 应该调用映射到 /pollurl-pattern 的 servlet,并且在 doGet() 方法中基本上包含以下行。

    request.getSession(); // Keep session alive.
    

    就是这样。

    【讨论】:

      【解决方案2】:

      Flash 视频是否嵌入在 HTML 页面中?如果是这样,也许您可​​以在页面上进行 AJAX 调用,定期向服务器发送“心跳”以保持会话处于活动状态。

      【讨论】:

        猜你喜欢
        • 2011-09-25
        • 1970-01-01
        • 2017-10-06
        • 2012-08-16
        • 1970-01-01
        • 2012-09-16
        • 2014-03-22
        • 1970-01-01
        • 2012-04-17
        相关资源
        最近更新 更多