2010-12-21 58 views
6

我希望我的cookie在用户关闭浏览器时消失 - 我已经设置了一些看起来很有前途的属性,但即使在关闭整个浏览器之后,我的cookies仍然会弹出。如何在C#中创建非持久(在内存中)http cookie?

HttpCookie cookie = new HttpCookie("mycookie", "abc"); 
cookie.HttpOnly = true; //Seems to only affect script access 
cookie.Secure = true; //Seems to affect only https transport 

什么属性或方法调用我缺少实现内存cookie?

回答

2

这个问题已经在网上公布了1000+次。在浏览器打开的情况下处理非永久cookie超时的最佳方式是为超时添加一个键值。下面的代码用于登录用户标识键值和用于浏览器兼容性的加密(未包括)安全性。我不使用表单身份验证。

HttpCookie cookie = new HttpCookie(name); 
cookie.Values["key1"] = value; 
cookie.Values["key2"] = DateTime.Now.AddMinutes(70).ToString(); 
          //timeout 70 minutes with browser open 
cookie.Expires = DateTime.MinValue; 
cookie.Domain = ConfigurationManager.AppSettings["website_domain"]; 
System.Web.HttpContext.Current.Response.Cookies.Add(cookie); 

当检查cookie的键值使用:

try 
{ 

DateTime dateExpireDateTime; 
dateExpireDateTime = DateTime.Parse(HttpContext.Current.Request.Cookies[name]["key2"]); 

if (DateTime.Now > dateExpireDateTime) 
{ 
//cookie key value timeout code 
} 
else 
{ 
//reset cookie 
} 

catch 
{ 
//clear cookie and redirect to log in page 
} 

我发现使用窗体身份验证和谷歌Chrome兼容性问题。

1

看看ASP.NET Session变量。这将根据您的浏览器而持续存在,并且可以设置为“无cookie”或超时。

http://msdn.microsoft.com/en-us/library/h6bb9cz9%28VS.71%29.aspx

+0

这是不是真的与我的问题丢失。想象一下,如果会话被禁用,并且我仍然想创建一个Http Cookie,当浏览器关闭/不写入磁盘等时,它将消失。我认为其他一些答案在正确的轨道上。 – MatthewMartin 2010-12-21 16:15:02

6
cookie.Expires = DateTime.MinValue; 

这个cookie将到期,只要在浏览器关闭。

7

浏览会话结束后,未明确设置过期的Cookie将自动消失。

现在,“浏览会话”对不同的浏览器意味着不同的东西。对于某些浏览器来说,这意味着浏览器的每个实例都已关闭。对于某些人而言,这意味着相关标签或原始浏览器已关闭。

在您的测试中,请确保在重新打开查找cookie之前关闭浏览器的每个实例。如果您在浏览器名称和修订后仍然有问题。

4

如果您没有设置Cookie.Expires属性,则cookie将设置为在浏览器会话结束时过期。

2

的Cookie不会在浏览器关闭被破坏,如果Taken from here

HttpCookie cookie = new HttpCookie(name); 
cookie.Value = value; 
cookie.Expires = Convert.ToDateTime(“12/12/2008″); //*difference is here*// 
Response.Cookies.Add(cookie);} 

cookie将在浏览器关闭,如果

 HttpCookie cookie = new HttpCookie(name); 
    cookie.Value = value; 
    Response.Cookies.Add(cookie);} 
+0

不完全正确,再次基于浏览器。希望浏览器能够聚在一起并就“浏览器会话结束时”达成一致。 – GoldBishop 2018-02-01 14:39:37

相关问题