我真的不明白请求cookie和响应cookie之间的区别。似乎每次我回发,如果我不手动将cookie从请求重写为响应,那么它就会消失。我该如何解决这个问题?
public string getCookie(string name) {
if (Request.Cookies["MyApp"] != null && Request.Cookies["MyApp"][name] != null) {
return Request.Cookies["MyApp"][name];
} else if (Response.Cookies["MyApp"] != null && Response.Cookies["MyApp"][name] != null) {
return Response.Cookies["MyApp"][name];
} else {
return "";
}
}
public void writeCookie(string name, string value) {
Response.Cookies["MyApp"][name] = value;
HttpCookie newCookie = new HttpCookie(name, value);
newCookie.Expires = DateTime.Now.AddYears(1);
Response.SetCookie(newCookie);
}
答案 0 :(得分:0)
Request
是用户尝试访问您网站时获得的“内容”,而Response
是响应此请求的方式。
换句话说,请参阅官方的msdn文档,即这部分:
ASP.NET包含两个内部cookie集合。这个系列 通过HttpRequest的Cookies集合访问包含 Cookie由客户端传输到Cookie标头中的服务器。 通过HttpResponse的Cookies集合访问该集合 包含在服务器上创建并传输到服务器的新cookie Set-Cookie标头中的客户端。
http://msdn.microsoft.com/en-us/library/system.web.httprequest.cookies.aspx
所以不,你不必每次都创建新的cookie,除非它们已经过期。请务必参考正确的Cookie集合。
答案 1 :(得分:0)
您可能想要检查分配给Cookie的域和路径。可能是您保存的Cookie只是孤立的,因为路径太具体或者因为设置了错误的域名。
域是浏览器看到的服务器名称,例如“yourdomain.com”。如果使用与此不同的域设置cookie,则浏览器将永远不会将其发回。同样,cookie的路径是所请求资源的路径,例如“/ forum / admin / index”等。该cookie发送给该位置和所有子位置,但不是父位置。如果您正在访问位于“/ forum”目录中的页面,则不会发送为“/ forum / admin / index”设置的Cookie。
答案 2 :(得分:0)
Request.Cookies["MyApp"];
上面的代码会返回一个名为“MyApp”的cookie。执行此操作:
Request.Cookies["MyApp"][name]
您正在从名为“MyApp”的cookie中获取值“name”。
但是在你的setCookie代码中,你设置了一个名为name
的cookie,并且没有创建一个名为“MyApp”的cookie:
HttpCookie newCookie = new HttpCookie(name, value);
newCookie.Expires = DateTime.Now.AddYears(1);
Response.SetCookie(newCookie);
所以,你应该从你拥有它的任何地方删除["MyApp"]
,或者你可以在setCookie中做这样的事情:
public void writeCookie(string name, string value) {
if(Response.Cookies["MyApp"] == null) {
HttpCookie newCookie = new HttpCookie("MyApp");
newCookie.Expires = DateTime.Now.AddYears(1);
Response.SetCookie(newCookie);
}
if(Response.Cookies["MyApp"][name] == null)
Response.Cookies["MyApp"].Values.Add(name, value);
else
Response.Cookies["MyApp"][name] = val;
// or maybe simple Response.Cookies["MyApp"][name] = val; will work fine, not sure here
}