我正在尝试使用 C# 4.0 和以下代码制作持久性 cookie:
HttpCookie AssoCookie = new HttpCookie("AssociateCode", AssociateCode);
AssoCookie.Expires = DateTime.Now.AddMonths(6);
HttpContext.Current.Response.Cookies.Add(AssoCookie);
不幸的是,它不起作用并且 cookie session 即将过期。如果我在 Firefox 中使用 Web Developer 插件来检查它,我可以看到以下信息:
Name AssociateCode
Value test
Host localhost
Path /
Secure No
Expires At End Of Session
我作为测试所做的 cookie 刚刚在那里创建,没有其他人管理或编辑它,因此它不能被覆盖。我没有在 webconfig 中设置任何设置 cookie 过期时间(无论如何这应该覆盖它)并且如果我设置一些 cookie 过期时间它不起作用。
我现在有点迷茫了,每本手册、教程、博客,无论我检查什么,都说你只需要设置到期日期,我调试过,我检查过它在创建时和 Page_PreRender 结束时确实具有该值但无论我做什么,它都会随着 session 而过期。
有什么想法吗?
顺便说一句,我使用的是 Firefox 9.0.1。
更新
在 Firefox 中使用 Firebug 插件检查响应 header 我得到了这个:
Response Headersview source
Cache-Control private
Connection Close
Content-Length 21322
Content-Type text/html; charset=utf-8
Date Mon, 23 Jan 2012 16:47:08 GMT
Server ASP.NET Development Server/10.0.0.0
Set-Cookie AssociateCode=test; expires=Mon, 23-Jul-2012 16:09:04 GMT; path=/
X-AspNet-Version 4.0.30319
使用 Fiddler 我得到了这个:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Set-Cookie: AssociateCode=; expires=Mon, 23-Jul-2012 16:27:29 GMT; path=/
X-Powered-By: ASP.NET
Date: Mon, 23 Jan 2012 17:27:29 GMT
Content-Length: 21313
** 更新 2 ** 我正在检查 Cookie 是否存在,只是在我的 Firefox 的 cookie 之间进行检查,但是,如果您想稍后在代码中查看我是如何获取它的(没有必要,因为它不在那里):
try {
AssociateCode = HttpContext.Current.Request.Cookies.Get("AssociateCode").Value;
} catch { }
最佳答案
只是为了跟进我的评论:
来自 fiddler 和 firefox 工具的信息表明您正在发送正确的信息来创建 cookie。
这让我相信您错误地测试了它的存在。
当测试 cookie 是否传递给您的应用程序时,您应该使用 Request.Cookies
容器来查看它是否存在。 (请注意,它是REQUEST 而不是RESPONSE)。
如果您使用类似的东西进行测试:
if (Response.Cookies["mycookie"] == null) { .. }
然后这将导致在响应对象中创建一个空白的新 cookie。
总结一下:Request 对象将包含从浏览器发送的所有内容。 Response 对象是您发送给浏览器的所有内容。
关于c# - Cookie 过期在 C# 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8973628/