我尝试使用C#4.0和此代码创建持久性cookie:
HttpCookie AssoCookie = new HttpCookie("AssociateCode", AssociateCode);
AssoCookie.Expires = DateTime.Now.AddMonths(6);
HttpContext.Current.Response.Cookies.Add(AssoCookie);
不幸的是,它不起作用,cookie会话到期。如果我在Firefox中使用Web Developer插件进行检查,我可以看到这个信息:
Name AssociateCode
Value test
Host localhost
Path /
Secure No
Expires At End Of Session
我正在做的cookie作为它刚刚在那里创建的测试,没有其他人管理它或编辑它所以它不能被覆盖。我没有在webconfig中设置任何设置cookie到期(无论如何这应该覆盖它),如果我设置一些cookie到期时间它不起作用。
我现在有点迷失,每个手册,教程,博客,无论我检查说你只需要设置过期日期,我已经调试过,我已经检查过它在创建时和Page_PreRender结束时确实有这个值但它只是随着会话而到期。
有什么想法吗?
我正在使用Firefox 9.0.1 btw。
更新
在Firefox中使用Firebug插件检查响应标头我得到了这个:
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 { }
答案 0 :(得分:6)
只是跟进我的评论:
来自fiddler和firefox工具的信息表明您正在发送正确的信息以创建cookie。
这让我相信你错误地测试了它的存在。
在测试cookie是否传递给您的应用程序时,您应该使用Request.Cookies
容器来查看它是否存在。 (请注意,它是 请求 而非响应)。
如果您使用以下内容进行测试:
if (Response.Cookies["mycookie"] == null) { .. }
然后,这将导致在响应对象中创建一个空白的新cookie。
总结一下:Request对象将包含从浏览器发送的所有内容。 Response对象是您发送到浏览器的所有内容。
答案 1 :(得分:3)
您是否尝试过使用SetCookie功能代替Add?
HttpCookie cookie = new HttpCookie("test");
cookie.Expires = DateTime.Now.AddHours(10);
HttpContext.Current.Response.SetCookie(cookie);
快速测试一下这对我有用。
答案 2 :(得分:3)
好的大家好我很抱歉,但是出于某种原因,我暂时配置了我的浏览器以便在关闭Windows时删除cookie,因此,尽管正确创建了Cookie,但浏览器将它们设置为会话cookie并不是因为它们是因为浏览器选项。
事实上,如果我在Firefox中管理Cookie,我可以取消选中Cookie中的“Session Cookie”选项,然后过期日期是正确的,但出于某种原因,默认情况下会选中检查选项。我想也许有一种方法来设置Cookie是否是会话Cookie,或者.Net在我意识到这一点之前做了一些事情。
好吧,当没有任何逻辑似乎有效时,你知道问题是你能想象到的最愚蠢的事情......
再次抱歉。