set-cookie似乎被Chrome忽略但不是IE?奇怪的过期问题?302重定向?好的Gawd,你们呀

Mus*_*idd 5 cookies asp.net-mvc

我正在使用类似于此的代码通过ASP.NET设置一个带有过期日期的cookie

System.Web.Security.FormsAuthenticationTicket ticket = new System.Web.Security.FormsAuthenticationTicket(1, uname, DateTime.UtcNow, DateTime.UtcNow.AddDays(30), bool_persist, "some custom string data here");

string encrypted_ticket = System.Web.Security.FormsAuthentication.Encrypt(ticket);

HttpCookie auth_cookie = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName, encrypted_ticket);
auth_cookie.HttpOnly = true;

if (persist) //passed in to method as parameter
{
     auth_cookie.Expires = DateTime.UtcNow.AddDays(30);
}
auth_cookie.Domain = ".mydomainname.com";
Response.Cookies.Set(auth_cookie);
Run Code Online (Sandbox Code Playgroud)

我还在同一个请求中设置另一个cookie来保留其他一些数据,然后我重定向到另一个页面.

以下标题介绍了响应

HTTP/1.1 302 Found
Location: /redirect_to_this_page
Set-Cookie:.myAuthCookie=TRUNCATED_ENCRYPTED_DATA_FOR_READABILITY; domain=.mydomainname.com; expires=Sun, 27-Nov-2011 20:27:16 GMT; path=/; HttpOnly
Set-Cookie:__MyOtherCookie=; domain=full.mydomainname.com; expires=Thu, 28-Oct-2010 20:27:24 GMT; path=/; HttpOnly
Run Code Online (Sandbox Code Playgroud)

根据请求/redirect_to_this_page,我没有看到由于某种原因发送标头.

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:__utma=113888769.1619895090.1322774580.1322774580.1322774580.1;     __utmb=113888769.5.8.1322774827282; __utmc=113888769;     __utmz=113888769.1319833259.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=
Host:full.mydomainname.com
Referer:http://full.mydomainname.com/referring_page_that_set_cookies
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko)         Chrome/15.0.874.106 Safari/535.2
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题?每个请求都会设置__MyOtherCookie.

谢谢
穆斯塔法


编辑

一些发现:IE9正常工作.Set-Cookie如果Cookie 具有过期日期,则在获取标头后不会设置Cookie .

因此,如果我发送cookie没有过期(因此它被浏览器视为会话cookie,在浏览器关闭时被杀死),cookie总是被正确设置并且所有请求都包含正确的cookie.

用乔恩斯图尔特的话来说...... 哇?

Tad*_*cik 1

从您的自定义 cookie 中删除域,然后重试。

如果您想在所有子域中使用 cookie,则 cookie 中的域名必须与开头带有点的域匹配,查看您的标头,它不匹配:

服务器响应有:

full.mydomainname.com
Run Code Online (Sandbox Code Playgroud)

请求有:

full.mydomain.com
Run Code Online (Sandbox Code Playgroud)

或者可能与 Safari 错误有关Safari 不设置 Cookie,但 IE / FF 却设置