饼干在ASP.Net

问题描述:

我这样设置一个cookie在一个页面:饼干在ASP.Net

Request.Cookies["lang"].Value = "en-US"; 
Request.Cookies["lang"].Expires = DateTime.Now.AddDays(50); 

在另一页我尝试读取cookie:

string lang = Server.HtmlEncode(Request.Cookies["lang"].Value); 

该Cookie不为空,但价值是一个空字符串。我究竟做错了什么?

您应该使用Response.Cookies来设置cookie,Request.Cookies可以读取客户端发回的任何cookie。

您问题中的代码是在Request对象中设置Cookie,而不是Response

+2

另请注意,在响应中设置的Cookie将不会出现在请求中,直到下一页加载。 – 2010-07-09 19:15:27

+0

谢谢先生。这是答案。 – Arizona1911 2010-07-09 20:15:13

客户端是否启用cookie?您设置cookie的事实并不意味着客户端支持它们并将它们发回。

请记住,你正在处理两个断开的系统;你的服务器不保持状态,你对客户端知之甚少。

+0

有时最简单的答案就是你经常忘记的答案。甚至没有想过让他检查一下。 – spinon 2010-07-09 19:13:14

+0

在我的浏览器中启用了Cookie。如果我在尝试在同一页面上设置cookie后再读取该cookie,则会返回正确的值。但是如果我在不同的页面上阅读它,它会返回一个空字符串。 – Arizona1911 2010-07-09 19:19:02

+0

@ Arizona1911:发生这种情况是因为您在“请求”而不是“响应”中设置了Cookie。 – LukeH 2010-07-09 19:57:50

如果我没有记错,我认为你应该使用响应而不是请求,因为请求是发送给你的东西。响应是当你想设置回客户端浏览器。

编辑:你在做什么是修改该特定请求中的cookie,这将有道理为什么你没有看到后续页面。这不是将它们保存回客户端。