问题描述
我想知道您是否可以在用户关闭浏览器时帮助我处理持久性 cookie。
我在 IIS 和 asp 上运行网络,会话工作正常,但每次用户关闭浏览器时,会话都会丢失,因此购物车也丢失了。
我认为这可能与 global.asa 文件有关? (我在 global.asax 上看到了有关持久性 cookie 的答案,但我的网站使用的是 global.asa)
这是我当前的 global.asa 文件,有什么想法吗?
Sub Application_OnStart
Application("ActiveUsers") = 0
End Sub
Sub Session_OnStart
Session.Timeout = 600
Session("Start") = Now
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") + 1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") - 1
Application.UnLock
End Sub
</script>
非常感谢!
解决方法
据我所知,如果没有设置长时间的超时时间,关闭浏览器时cookie是不会存在的。因此,即使会话仍然存在于服务器中,会话 ID 也会丢失(并且会在超过超时值时过期)。
因此,对于您的情况,您应该为 cookie 超时设置很长时间,但不要像代码所示那样为会话设置超时。您可以在页面上设置 cookie 超时值,如 duplicate question 提到的:
<script>
void function session_cookie_change() {
var s,a;
s=document.cookie.split(/\=/);
a=s[0];
var dtExpires = new Date();
dtExpires.setFullYear(1970,1,1);
a += ';
// The expires parameter of the cookie
// is set to the previous date
expires=' + dtExpires.toGMTString();
a += '; path=/';
document.cookie=a;
}
</script>
<body onload='session_cookie_change()'>
除此之外,您还需要注意会话 ID。虽然关闭浏览器时 cookie 不会被删除,但当您重新打开浏览器连接到服务器时,它会使用另一个会话 ID。因此,您可能还需要在 chrome 地址中输入 chrome://flags
并搜索 samesite
,然后将其禁用。