当响应中有 Set-Cookie 标头时,什么可能导致 cookie 未在浏览器中设置?

我正在使用 cookie 进行表单身份验证的 .net 网站上工作,我想添加另一个安全 cookie 来保存访问和刷新令牌。正在将 cookie 添加到Response.Cookies并且一切似乎都很好。我使用 fiddler 检查响应标头以确保Set-Cookie设置了标头。


HTTP/1.1 302 Found

Cache-Control: no-cache, no-store

Pragma: no-cache

Content-Type: text/html; charset=utf-8

Expires: -1

Location: /

Set-Cookie: 

    TestTokenCookie=(truncated for brevity); 

    domain=local.foobar.com; 

    expires=Sun, 18-Nov-2018 14:42:56 GMT;

    path=/

X-Frame-Options: SAMEORIGIN

X-UA-Compatible: IE=Edge,chrome=1

Date: Mon, 20 Aug 2018 13:42:59 GMT

Content-Length: 118

响应看起来正确,但浏览器中没有出现 cookie。我正在使用 Edit This Cookie chrome 扩展程序来查看已设置的 cookie。这是我使用的设置 cookie 的代码。


public void CreateTokenCookie(TokenCookieData tokenCookieData, HttpContextBase currentContext, bool createPersistentTicket = true)

{

    var ticket = new FormsAuthenticationTicket(1,

        tokenCookieData.Username,

        DateTime.Now,

        DateTime.Now.AddDays(90),

        createPersistentTicket,

        tokenCookieData.ToString());


    CreateCookieFromTicket(ticket, TOKEN_COOKIE_NAME, true, currentContext);

}


private void CreateCookieFromTicket(FormsAuthenticationTicket ticket, string cookieName, bool httpOnly, HttpContextBase currentContext)

{

    var encryptedTicket = FormsAuthentication.Encrypt(ticket);


    var cookie = new HttpCookie(cookieName, encryptedTicket)

    {

        HttpOnly = httpOnly,

        Secure = FormsAuthentication.RequireSSL,

        Path = FormsAuthentication.FormsCookiePath,

        Expires = ticket.Expiration

    };


    var domain = GetCookieDomain();


    if (domain != null)

    {

        cookie.Domain = domain;

    }


    if (currentContext.Response.Cookies[cookieName] != null)

    {

        currentContext.Response.Cookies.Remove(cookieName);

    }


    currentContext.Response.Cookies.Add(cookie);

}

任何想法为什么没有在浏览器中设置 cookie?


Helenr
浏览 545回答 2
2回答

侃侃尔雅

我认为问题可能是您的域“domain=local.test.com;”有关更多详细信息,请参阅此https://stackoverflow.com/a/24071239/10241547test.com 似乎是该限制列表的一部分或者可能是 com// com : https://en.wikipedia.org/wiki/.comcom请参阅:https : //publicsuffix.org/list/public_suffix_list.dat

长风秋雁

我相信问题最终是 cookie 值的长度。原始值最终约为 4105 个字符,超过了 cookie 4093 字节的最大大小。
打开App,查看更多内容
随时随地看视频慕课网APP