【问题标题】:ASP.NET: Request cookies have null for domain?ASP.NET:请求 cookie 的域为空?
【发布时间】:2010-07-19 23:24:37
【问题描述】:

当我检查我的 HttpContext.Current.Request.Cookies 集合时,我的一些 cookie 的域成员为 null。

为什么/什么时候域为空?

【问题讨论】:

    标签: asp.net cookies httprequest


    【解决方案1】:

    域属性仅用于设置 cookie。显然,如果您将 cookie 作为请求的一部分读取,则客户端浏览器会认为该域与您的站点适当匹配。

    【讨论】:

      【解决方案2】:

      默认情况下,Cookie 与当前域相关联。

      所以如果在现场

      www.foo.com

      然后您执行以下操作:

      HttpCookie appCookie = new HttpCookie("AppCookie");
      appCookie.Value = "written " + DateTime.Now.ToString();
      appCookie.Expires = DateTime.Now.AddDays(1);
      Response.Cookies.Add(appCookie);
      

      域名将是

      www.foo.com

      .

      但是,您可以通过设置域的范围来覆盖此功能:

      Response.Cookies["AppCookie"].Domain = "bar.foo.com";
      

      该 cookie 将仅可用于该特定子域中的请求。

      当然,您可以将 Domain 设置为 NULL,但我无法想象这样的场景会有用。

      检查您是如何创建 cookie 的。

      参考:http://msdn.microsoft.com/en-us/library/ms178194.aspx

      【讨论】:

      • 您的答案是关于设置 cookie。他的问题是关于从请求中读取(在服务器上)cookie。
      【解决方案3】:

      HttpCookieDomain 成员为 null 当 .Net 框架构造 HttpCookie 类的实例时,从存储在运行时配置文件 (system.web/httpCookies) 中的值初始化其值,并且该成员不会被另一个值(未指定)覆盖。这个unspecified值表示cookie应该由用户代理(通常是浏览器)发送到只发送cookie的服务器而不是其他服务器。

      根据互联网提出的标准RFC6265 HTTP State Management Mechanism

      如果服务器省略域属性,用户代理将 仅将 cookie 返回到源服务器。

      警告:一些现有的用户代理会处理缺失的域 属性好像域属性存在并包含 当前主机名。例如,如果 example.com 返回一个 没有域属性的 Set-Cookie 标头,这些用户代理将 错误地将 cookie 也发送到 www.example.com

      RFC 没有为 unspecified 定义任何特定值,因此实现者可以选择他们喜欢的任何值。 Microsoft 选择将域成员表示为字符串值,因此 null 或 "" (String.Empty) 表示 未指定,但隐式配置的默认值是 null

      如果您收到的 cookie 的域值为 null,则表示用户代理处理了 cookie,确定其来源与发送请求的服务器匹配,并将 cookie 数据包含在请求的 @987654330 中@标头。同样,如果您要返回该 cookie,您可能希望在另一个请求中仅由运行您的应用程序的同一主机接收该 cookie。

      在 ASP.Net 应用程序中,如果 string.IsNullOrEmpty(cookie.Domain) 为真,您可以假设用户代理在对服务器的请求中包含了 cookie,它决定为原始主机,即 Request.Url.Host

      【讨论】:

        猜你喜欢
        • 2017-02-02
        • 2014-10-29
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 2021-03-12
        相关资源
        最近更新 更多