当我检查我的HttpContext.Current.Request.Cookies集合时,我的一些cookie对其域成员来说是空的。
为什么/何时域为空?
答案 0 :(得分:9)
域属性仅用于设置cookie。显然,如果您在请求中阅读cookie,则客户端浏览器会认为该域名与您的站点相匹配。
答案 1 :(得分:1)
默认情况下,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只能用于该特定子域中的请求。
当然,您可以将域设置为NULL,但我无法想象这会有用的场景。
检查您创建Cookie的方式。
答案 2 :(得分:0)
当 .Net Framework 构造 Domain
类的实例,从存储在运行时配置文件 (system. web/httpCookies),并且该成员不会被另一个值(未指定)覆盖。这个未指定值表示cookie应该由用户代理(通常是浏览器)发送给只发送cookie的服务器,而不发送给其他服务器。
根据互联网提议的标准HttpCookie:
<块引用>如果服务器省略了域属性,用户代理将 仅将 cookie 返回给源服务器。
警告:一些现有的用户代理会处理不存在的域 属性就好像域属性存在并包含一样 当前主机名。例如,如果 example.com 返回一个 没有域属性的 Set-Cookie 标头,这些用户代理将 也错误地将 cookie 发送到 RFC6265 HTTP State Management Mechanism。
Th RFC 没有为unspecified 定义任何特定的值,因此实现者可以选择他们喜欢的任何一个或多个值。 Microsoft 选择将域成员表示为字符串值,因此 HttpCookie
或 "" (null
) 表示未指定,但隐式配置的默认值为 {{1} }.
如果您收到域值为 String.Empty
的 cookie,则表示用户代理处理了该 cookie,确定其来源与发送请求的服务器相匹配,并将 cookie 数据包含在请求的null
标题。同样,如果您要返回该 cookie,您可能希望在另一个请求中仅由运行您的应用程序的同一主机接收该 cookie。
在 ASP.Net 应用程序中,如果 null
为真,您可以假设用户代理将 cookie 包含在对它确定为原始主机的服务器的请求中,即 Cookie
。>