如何在C#中创建非持久性(内存中)http cookie?

Mat*_*tin 6 c# asp.net cookies httpcookie

当用户关闭他们的浏览器时,我希望我的cookie消失 - 我已经设置了一些看起来很有前途的属性,但是即使在关闭整个浏览器之后我的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
Run Code Online (Sandbox Code Playgroud)

我错过了什么属性或方法来实现内存cookie?

Not*_*tMe 7

一旦浏览会话结束,没有明确设置过期的Cookie将自动消失.

现在,"浏览会话"对不同的浏览器意味着不同的东西.对于某些浏览器,它意味着浏览器的每个实例都是关闭的.对于某些人来说,这仅仅意味着相关标签或原始浏览器已关闭.

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


not*_*row 6

cookie.Expires = DateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)

一旦浏览器关闭,此cookie将过期.


小智 1

在浏览器打开的情况下处理非持久 cookie 超时的最佳方法是添加超时键值。下面的代码用于登录用户 ID 键值和加密(不包括)安全性,以实现浏览器兼容性。我不使用表单身份验证。

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);
Run Code Online (Sandbox Code Playgroud)

检查 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
}
Run Code Online (Sandbox Code Playgroud)

我发现使用表单身份验证和 Google Chrome 存在兼容性问题。