首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么cookie.domain要设置两个cookies?

问为什么cookie.domain要设置两个cookies?
EN

Stack Overflow用户
提问于 2012-02-16 06:28:56
回答 2查看 3.6K关注 0票数 2

我试图让一个子域使用cookie.domain属性为整个域创建cookie,而不仅仅是它的子域,这样两个子域就可以共享cookie信息。当我部署到IIS时,我会创建两个cookie,一个用于域,另一个用于子域。为什么会这样呢?当我更新cookie时,唯一更新的是子域cookie,这使得域cookie变得无用。

我试图通过我的代码来跟踪它,但是在调试模式下运行visual studio实际上根本不会设置任何cookie,除非我没有设置cookie.domain属性。如果省略domain.cookie,我会得到一个设置为localhost的cookie,但只有一个cookie。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-16 23:28:24

好了,我终于回答了我自己的问题。我将首先处理第二个问题,关于在调试模式下运行站点:

Visual studio调试到站点http://localhost:[someport]。因此,如果代码设置为使用mydomain.com的cookie.domain创建cookie,则不会设置cookie,因为浏览器知道您位于本地主机,而不是指定的域。为了纠正这个问题,我在我的主机文件中添加了一个条目,以便mydomain.com指向127.0.0.1。然后我在调试模式下启动了站点。当站点作为本地主机出现时,我将浏览器中的URL改为http://subdomain.domain.com:[someport]并刷新。现在可以设置cookie了。

这样做有助于我跟踪我的代码,找到我的子域网站创建的两个cookie的问题。我发现由于cookie.domain,mydomain.com cookie可以正常创建(下面的CreateCookie方法)。然而,当我试图更新cookie (下面的UpdateCookie)的过期时间时,它又回到了认为它应该使用子域cookie的想法,并在找不到时继续创建它。我所要做的就是在设置cookie和更新过期之前再次设置cookie.domain。现在我只有一块饼干了。

代码语言:javascript
复制
public void CreateCookie()
{
    HttpCookie cookie = new HttpCookie(mConfig.webCookie);
    TimeSpan span = new TimeSpan(0, 0, 30, 0);
    DateTime time = DateTime.Now; ;

    cookie["Username"] = mEncrypt.Encrypt(mUser.Username);
    cookie.Domain = "mydomian.com";

    cookie.Expires = time + span;

    HttpContext.Current.Response.Cookies.Add(cookie);
}

public void UpdateCookie()
{ 
    TimeSpan span = new TimeSpan(0, 0, 30, 0);
    DateTime time = DateTime.Now;

    HttpCookie cookie = HttpContext.Current.Request.Cookies[mConfig.webCookie];

    // without specifying the domain the cookie will be set with the subdomain
    cookie.Domain = "mydomain.com";
    HttpContext.Current.Response.Cookies.Set(cookie);

    HttpContext.Current.Response.Cookies[mConfig.webCookie].Expires = time + span;
}
票数 2
EN

Stack Overflow用户

发布于 2012-02-16 07:08:05

您可以在httpCookies上为web.config上的全域和子域设置此cookie名称

代码语言:javascript
复制
<httpCookies domain="domain.com" httpOnlyCookies="false" requireSSL="false" />

设置domain.com而不是www.domain.com来归档您所说的内容,以便在域和子域上拥有相同的cookie。类似地,还有一个关于身份验证的参数,您可以根据您所说的cookie来设置此cookie设置。

在你的问题“为什么会这样?”答案是,如果不为cookies设置此参数,则cookies实际上使用当前主机名,因此如果子域的名字发生变化,它们将不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9302498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档