在内容页面之间遍历时,cookie值会消失

在我的应用程序中 有一个登录机制,用于保存一个cookie,其中包含刚刚登录的用户的信息

private void CreateCookie(LoginEventArgs args) { HttpCookie cookie = new HttpCookie("user"); cookie.Values["name"] = args.User_Name; cookie.Values["id"] = args.ID; cookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(cookie); } 

在我的母版页面加载我执行检查以查看此cookie是否存在:

  HttpCookie cookie = Request.Cookies["user"] ; if( (cookie != null) && (cookie.Value != "")) { if (Session["user"] == null) Login_Passed(this, new LoginEventArgs(cookie.Values["name"].ToString(), int.Parse(cookie.Values["id"]))); } 

现在如果我登录(创建一个cookie),关闭浏览器,然后运行我的应用程序。 再次,cookie存在,它的值是正确的,用户“自动”登录。

如果我首先从启动内容页面重定向到不同的内容页面,则cookie值也完好无损,

问题是当我第二次重定向回到不同的内容页面时,主页面加载,检查cookie是否存在但值被删除…

关于为什么会这样的想法?

也许我退出的方式可能是这个问题的原因:

当我注销时,我创建一个与1天前相同名称的cookie。

  private void Remove_Cookie() { HttpCookie cookie = new HttpCookie("user"); cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookie); } 

在iv’e描述的情况下,我没有正式退出,我只是结束我的应用程序,所以这不应该有任何影响。

哦,问题是不可想象的
特别感谢Peter Bromberg

http://www.eggheadcafe.com/tutorials/aspnet/198ce250-59da-4388-89e5-fce33d725aa7/aspnet-cookies-faq.aspx

在“消失的Cookie”一文的部分

作者声明如果你在Response.Cookies [“cookie_name”]上有一个监视器,浏览器会创建一个新的空cookie来覆盖你的cookie。

我使用了这样的手表,这使我的cookies松散了它的价值,当我把它取下时,cookies保留了它的价值。

道德是不要观察Response.Cookies [“”]我还读了一些其他post,如果你检查

  if( Response.Cookies["cookie_name"] != null ) 

例如它也被覆盖。

重申并以已经陈述的内容为基础(是的,我知道这是一个4岁的问题)我发现最好建立一个实用程序来处理这个 – 主要是因为我想经常检查那个特定的cookie。

这不会触及响应,但只能从请求中读取。

  public static HttpCookie GetCookie(string cookieName) { HttpCookie rqstCookie = HttpContext.Current.Request.Cookies.Get(cookieName); /*** NOTE: it will not be on the Response! * this will trigger the error noted in the original question and * create a new, empty cookie which overrides it * HttpCookie respCookie = HttpContext.Current.Response.Cookies.Get(cookieName); * */ if (rqstCookie != null && !String.IsNullOrEmpty(rqstCookie.Value)) { // is found on the Request return rqstCookie; } else { return null; } } 

原则进行的拇指

始终从请求中读取并写入响应。

谢谢伊兰! 这篇文章正是我所需要的

尝试以下方法:

  • 如果您在本地计算机上进行开发,请将您的应用程序放在一个免费的网页上,这样就不会有“特殊处理”,因为您在本地主机上。
  • 如果您已经在网络服务器上,并且如果重定向位于两个不同的域之间,您可能需要搜索谷歌的“同源策略”或阅读: http : //en.wikipedia.org/wiki/ Same_origin_policy (该文档涉及javascript,但对于cookie也是如此)。