【问题标题】:Prevent mozilla session restore阻止 Mozilla 会话恢复
【发布时间】:2012-07-11 02:30:30
【问题描述】:

Mozilla 能够恢复我的 Java EE 银行应用程序的会话(崩溃时,恢复会话选项)。

有没有办法通过编写一些代码来防止 Mozilla 恢复会话? 或者是否可以识别会话恢复时发出的请求并强制用户再次登录?

【问题讨论】:

    标签: java session firefox session-state


    【解决方案1】:

    如果您需要在浏览器崩溃后使页面无效,您应该使用驱动缓存行为的 HTTP 标头:

    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
    <META HTTP-EQUIV="EXPIRES" CONTENT="0">
    

    M.

    【讨论】:

    • 谢谢,但即使在添加了上述标题后,Firefox 也能够在崩溃后恢复会话。
    【解决方案2】:

    我不知道它是否直接回答了您的问题,但您可以关闭恢复之前的会话。以下链接中的详细信息来自 Mozilla。

    http://support.mozilla.org/en-US/kb/restore-previous-session#w_configuring-session-restore

    【讨论】:

      【解决方案3】:

      看起来这种方式还不存在(截至 2013 年 3 月 4 日)。让我们希望浏览器开发人员能够理解 Session Restore 会带来安全漏洞。

      【讨论】:

        【解决方案4】:

        我正在研究同样的问题。

        我认为让浏览器恢复旧会话通常是个坏主意。 但是我尝试了几件事,例如设置缓存控制标头,但这对我不起作用。

        所以我确实在考虑在脚本中解决这个问题。

        但是我发现不同的解决方案会出现不同的问题。

        1) 在浏览器关闭时删除 cookie --> 问题:您应该使用添加漏洞的 javascript 来执行此操作,因为 http_only 应该设置为 false

        2) 将 cookie_lifetime 从 0(浏览器关闭时)设置为例如 3600(1 小时)。 --> 问题:将其设置为高会丢失安全性,将其设置为低会给用户一个“会话已过期”错误消息,这意味着他们必须重新登录。

        3) 添加第二个带有过期日期的 cookie。如果 cookie 在那里,一切都很好。 --> 问题:(几乎)与 2 相同)只有在设置 cookie 后可以更改到期日期时,这才有效。在这种情况下,用户应该至少保持活跃状态​​ XX 分钟,否则他将失去会话(对我来说似乎是正确的)。

        我自己会看看后面的。

        所以在这种情况下,我使用的是 PHP(不是 Java),但我想总体思路是一样的:

        //create expiration cookie
        private function setExpireCookie(){
        
            //expire cookie: name, value, expiration in seconds, path, domain, https, http-only
            setcookie("Test_Expire", "Expire", time()+3600, "/test", null, false, true);
        }
        
        //check if expiration cookie exits
        private function expireExists() {
        
            return isset($_COOKIE['Test_Expire']);
        
        }
        
        //set the session check for expiration cookie
        private function getSession() {
        
            //does the session cookie exists and the expiration cookie doesnt?
            if (!$this->expireExists() && isset($_COOKIE['Test_Cookie'])) {
        
                //to remove the cookie by setting the expiration time before now
                setcookie("Test_Cookie", $_COOKIE['Test_Cookie'], time()-3600, "/test");
            }
        
            //now we can set the new expiration cookies en start the new session
            $this->setExpireCookie();
        
            //set cookie params: lifetime, path, domain, https, http-only
            session_set_cookie_params(0, "/api", null, false, true);
        
            session_name('Test_Cookie');
        
            //start session
            session_start();
        }
        

        这对我有用。所以希望你可以在 Java 中应用它

        【讨论】:

        • 嘿! ;) 没有理由投反对票。我创造了一个解决方法:-)
        猜你喜欢
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 2013-08-08
        • 2020-02-02
        • 2019-07-26
        • 2017-06-13
        • 2020-05-21
        • 1970-01-01
        相关资源
        最近更新 更多