经典 ASP global.asa 上的持久性 cookie

问题描述

我想知道您是否可以在用户关闭浏览器时帮助我处理持久性 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,然后将其禁用。