Asp.net HttpCookie读/写问题

时间:2011-09-21 21:50:11

标签: asp.net session cookies

我一直在寻找这个问题的解决方案,但我没有一个。顺便说一句,我无法理解我的问题的原因。

问题是:

我的网络应用程序有一个登录页面,并从cookie获取登录的用户ID。它之前有用,但是在5-6天之前因为改变了它而没有与IE一起工作。现在它不适用于任何浏览器。

我可以在Chrome中看到Cookie。当使用Internet Explorer Developer Tool查看有时会写入但仍无法通过IE读取的cookie

我的网络应用程序位于Windows Server 2008 R2 BTW上

设置我的web.config:

<httpCookies domain=".domainname.com" httpOnlyCookies="false" requireSSL="false" />

这是我的SetCookie代码

<!-- language: c# -->
string uId = "userID";
DateTime expireDate = DateTime.Now.AddDays(3);
HttpContext.Current.Response.Cookies["cookieName"]["uID"] = uId;
HttpCookie aCookie = new HttpCookie("cookieName");

aCookie.Values["uID"] = uId;
aCookie.Path = "/";
aCookie.Expires = expireDate;
aCookie.HttpOnly = false;
aCookie.Domain = "domainname.com";
aCookie.Name = "cookieName";
HttpContext.Current.Response.Cookies.Add(aCookie);

这个GetCookie代码

<!-- language: c# -->
if (HttpContext.Current.Request.Cookies["cookieName"] != null)
{
    System.Collections.Specialized.NameValueCollection UserInfoCookieCollection;
    UserInfoCookieCollection = HttpContext.Current.Request.Cookies["cookieName"].Values;
    userID = HttpContext.Current.Server.HtmlEncode(UserInfoCookieCollection["uID"]);
}
  

场景是:

     
    

尝试登录

         

触发了SetCookie方法

         

SetCookie方法结束时有两个cookie“cookieName”和     “ASP.NET SessionId”

         

触发了GetCookie方法

         

只有“ASP.NET SessionId”和会话值仍然相同

  

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我的问题解决了。将我的代码更改为此

            string uId = "userID";
            DateTime expireDate = DateTime.Now.AddDays(3);

            var httpCookie = HttpContext.Current.Response.Cookies["cookieName"];
            if (httpCookie != null)
            {
                httpCookie["uID"] = uId;

                HttpContext.Current.Response.Cookies.Add(httpCookie);
            }
            else
            {
                HttpCookie aCookie = new HttpCookie("cookieName");
                aCookie.Values["uID"] = uId;
                aCookie.Expires = expireDate;

                HttpContext.Current.Response.Cookies.Add(aCookie);
            }

答案 1 :(得分:0)

这个让我难过。但设法如下解决它。所以基本上将到期时间设置为初始化器的一部分是行不通的。将cookie添加到响应对象后设置它可以工作!

enter image description here