2009-11-18 98 views
0

是否有可能跨浏览器会话(特别是Internet Explorer)使用会话cookie。我想用户登录到我的网站,因此得到一个cookie,当用户打开另一个IE进程有该会话cookie认证用户。跨浏览器进程的会话Cookie

目前正在查找用户是否打开新窗口或选项卡,因为它驻留在同一个进程中。

回答

0

一旦浏览器关闭,会话cookie就会过期(这是PHP会话cookie的默认行为)。在Firefox中,通过在您的网站上共享两个会话来启动两个进程;与IE浏览器,它不会,可能是因为“会话”Cookie不在进程之间共享。为了克服这个问题,你可以在一个cookie中处理自己的会话ID,该cookie没有0作为到期时间,而是将来有一个时间戳(假设提前30天)。这样,Cookie可能在流程之间存活,但您必须依靠自己的ID来处理会话信息。

0

所以你真的想要“在这台计算机上记住我”的功能?然后,您需要自己创建另一个具有较长使用期限的cookie,例如一年。在这个具有特定名称和预定义名称的cookie中,您应该设置一个长时间的,独一无二的,难以猜测的自动生成的字符串(如哈希)。您将相同的值存储在数据库表中作为PK的服务器端以及用户标识(如果必要,还将用户IP作为可选安全性,并将Cookie TTL用于自动清除)。现在,在每个请求上检查cookie是否存在,然后使用与DB表中的cookie值相关联的用户标识执行自动登录。

0

在应用程序的Global.asax文件中把这个代码

Public Function Session_Start() 
{ 
    HttpCookie myCookie = HttpContext.Current.Request.Cookies["ASP.NET_SessionId"]; 
    if(myCookie != null) 
    { 
     myCookie.Expires(3); 
    } 
} 

这将让您的Cookie活着,因此您的会议将是活着的。 如果这样做不能解决你的问题,那么除了使你的会话状态为“StateServer”而不是默认的“InProc”,在web.config中