代码之家  ›  专栏  ›  技术社区  ›  David Carek

当响应中有一个设置的cookie头时,什么可能会导致浏览器中没有设置cookie?

  •  0
  • David Carek  · 技术社区  · 7 年前

    我正在做一件事。net网站,它使用cookie进行表单身份验证,我想添加另一个安全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。我正在使用“编辑此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吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Raj Sappidi    7 年前

    我认为问题可能在于你的域名“domain=local.test.com

    看到这个了吗 https://stackoverflow.com/a/24071239/10241547 更多细节

    测验com似乎是限制列表的一部分

    或者可能是因为com

    // com : https://en.wikipedia.org/wiki/.com
    com
    

    见: https://publicsuffix.org/list/public_suffix_list.dat

        2
  •  0
  •   David Carek    7 年前

    我相信最终的问题是饼干价值的长度。原始值最终约为4105个字符,超过了cookie 4093字节的最大大小。