我每次回发时都要重写cookie以保留它吗?

时间:2013-04-04 14:37:11

标签: c# cookies

我真的不明白请求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);
    }

3 个答案:

答案 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
    }