Google Chrome浏览器在崩溃后恢复会话Cookie,如何避免?

Adr*_*tti 5 .net asp.net authentication google-chrome session-cookies

在谷歌浏览器(我认为这与35版本的Windows 8.1,到目前为止,我没有尝试其他版本)时,浏览器崩溃(或者你只是拔掉电源线......),你会被要求恢复以前的会话,当你”再次打开它。很好的功能,它也可以还原会话cookie

我不想在这里讨论它是否是错误,无论如何,IMO都是中等安全性错误,因为具有物理访问该计算机权限的用户可能会“引起”崩溃,以窃取所有内容的未关闭会话(您不会要求再次登录)。

最后,我的问题是:网站如何避免这种情况?如果我对会话cookie 使用普通的 ASP.NET身份验证,则我不希望它们在浏览器崩溃的情况下幸免(即使重新启动计算机!)。

在用户代理字符串中没有类似于进程ID的东西,并且JavaScript变量都已还原(因此,我无法存储生成的随机种子(例如,服务器端))。还有其他可行的方法吗?会话超时将解决此问题,但通常会很长,并且会消除一个不安全的窗口。

Adr*_*tti 2

我没有找到任何可以用作进程 ID 的内容来确保 Chrome 尚未重新启动,但有一个肮脏的解决方法:如果我设置一个计时器(假设间隔五秒),我可以检查从最后一个刻度。如果经过的时间太长,则会话已恢复并执行注销。大致是这样的(对于每个页面):

var lastTickTime = new Date();

setInterval(function () {
    var currentTickTime = new Date();

    // Difference is arbitrary and shouldn't be too small, here I suppose
    // a 5 seconds timer with a maximum delay of 10 seconds.
    if ((currentTickTime - lastTickTime) / 1000 > 10) {
        // Perform logout
    }

    lastTickTime = currentTickTime;
}, 5000);
Run Code Online (Sandbox Code Playgroud)

当然,这不是一个完美的解决方案(因为恶意攻击者可能会处理这个问题和/或禁用 JavaScript),但到目前为止,它总比没有好。

具有更好解决方案的新答案非常受欢迎。