1

我不太了解请求 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);
    }
4

3 回答 3

0

Request是用户尝试访问您的网站时获得的“东西”,而Response是响应此请求的一种方式。

也就是说,看msdn官方文档,即这部分:

ASP.NET 包括两个内在的 cookie 集合。通过 HttpRequest 的 Cookies 集合访问的集合在 Cookie 头中包含了客户端向服务器传输的 cookie。通过 HttpResponse 的 Cookies 集合访问的集合包含在服务器上创建并在 Set-Cookie 标头中传输到客户端的新 cookie。

http://msdn.microsoft.com/en-us/library/system.web.httprequest.cookies.aspx

所以不,您不必每次都创建新的 cookie,除非它们已经过期。请确保您引用了正确的 cookie 集合。

于 2013-04-04T14:41:13.753 回答
0

您可能想要检查分配给 cookie 的域和路径。可能是因为路径太具体或设置了错误的域,您保存的 cookie 只是被孤立了。

域是浏览器看到的服务器名称,例如“yourdomain.com”。如果 cookie 设置的域与此不同,则浏览器将永远不会将其发回。同样,cookie 的路径是所请求资源的路径,例如“/forum/admin/index”等。cookie 是针对该位置和所有子位置发送的,但不是针对父位置发送的。如果您正在访问位于“/forum”目录中的页面,则不会发送为“/forum/admin/index”设置的 cookie。

于 2013-04-04T14:47:39.643 回答
0
Request.Cookies["MyApp"];

上面的代码将返回一个名为“MyApp”的 cookie 这样做:

Request.Cookies["MyApp"][name]

您正在从名为“MyApp”的 cookie 中获取值“名称”。但是在您的 setCookie 代码中,您正在设置一个名为的 cookie,name而不是创建一个名为“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
    }
于 2013-04-04T14:55:55.207 回答