我一直在寻找这个问题的解决方案,但我没有一个。顺便说一句,我无法理解我的问题的原因。
问题是:
我的网络应用程序有一个登录页面,并从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”和会话值仍然相同
感谢您的帮助。
答案 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添加到响应对象后设置它可以工作!