Cookie失效在C#中无效

Rub*_*ton 8 .net c# cookies

我试图使用C#4.0和这段代码制作一个持久性cookie:

HttpCookie AssoCookie = new HttpCookie("AssociateCode", AssociateCode);
AssoCookie.Expires = DateTime.Now.AddMonths(6);
HttpContext.Current.Response.Cookies.Add(AssoCookie);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用,cookie会话到期.如果我在Firefox中使用Web Developer插件进行检查,我可以看到以下信息:

Name    AssociateCode
Value   test
Host    localhost
Path    /
Secure  No
Expires At End Of Session
Run Code Online (Sandbox Code Playgroud)

我正在做的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
Run Code Online (Sandbox Code Playgroud)

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

**更新2**我检查Cookie不存在只是检查我的Firefox的cookie,但是,如果你想看看我以后如何在代码中得到它(没有必要,因为它不在那里):

try {
    AssociateCode = HttpContext.Current.Request.Cookies.Get("AssociateCode").Value;
} catch { }
Run Code Online (Sandbox Code Playgroud)

Not*_*tMe 6

只是为了跟进我的评论:

来自fiddler和firefox工具的信息表明您正在发送正确的信息来创建cookie.

这让我相信你错误地测试了它的存在.

在测试cookie是否传递给您的应用程序时,您应该使用Request.Cookies容器来查看它是否存在.(请注意,它是REQUEST not RESPONSE).

如果您使用以下内容进行测试:

if (Response.Cookies["mycookie"] == null) { .. }
Run Code Online (Sandbox Code Playgroud)

然后,这将导致创建响应对象中的新cookie,该cookie是空白的.

总结一下:Request对象将包含从浏览器发送的所有内容.Response对象是您发送到浏览器的所有内容.


Rub*_*ton 4

好吧大家。我很抱歉,但似乎出于某种原因,我之前将浏览器配置为在关闭窗口时删除 Cookie,因此,尽管 Cookie 已正确创建,但浏览器将它们设置为会话 Cookie 不是因为它们是会话 Cookie,而是因为浏览器选项。

事实上,如果我在 Firefox 中管理 Cookie,我可以取消选中 cookie 中的“会话 Cookie”选项,然后到期日期就是正确的,但由于某种原因,默认情况下会选中该检查选项。我想也许有一种方法可以设置 Cookie 是否是会话 Cookie,或者 .Net 可能正在做一些事情,直到我意识到这一点。

好吧,当逻辑似乎不起作用时,你就知道这个问题是你能想象到的最愚蠢的事情......

再次抱歉。