Cookie过期在C#中不起作用

本文关键字:不起作用 过期 Cookie | 更新日期: 2023-09-27 18:21:05

我试图使用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_Prender结束时是否真的有这个值,但无论我做什么,它都会随着会话而过期。

有什么想法吗?

我正在使用Firefox 9.0.1附带

更新

使用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**我只是在我的Firefox的Cookie之间检查Cookie是否存在,但是,如果你想看看我稍后如何在代码中获得它(没有必要,因为它根本不在那里):

try {
    AssociateCode = HttpContext.Current.Request.Cookies.Get("AssociateCode").Value;
} catch { }

Cookie过期在C#中不起作用

我的评论如下:

来自fiddler和firefox工具的信息显示,您正在发送正确的信息来创建cookie。

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

当测试cookie是否被传递到应用程序时,应该使用Request.Cookies容器来查看它是否在那里。(请注意,它是REQUEST而不是RESPONSE)。

如果你使用类似的东西进行测试

if (Response.Cookies["mycookie"] == null) { .. }

然后,这将导致在响应对象中创建一个空白的新cookie。

总之:Request对象将包含从浏览器发送的所有内容。Response对象是您发送到浏览器的所有内容。

您是否尝试过使用SetCookie函数而不是Add?

HttpCookie cookie = new HttpCookie("test");
cookie.Expires = DateTime.Now.AddHours(10);
HttpContext.Current.Response.SetCookie(cookie);

刚刚快速测试了这个,它对我有效。

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

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

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

再次抱歉。