我试图让一个子域使用cookie.domain属性为整个域创建cookie,而不仅仅是它的子域,这样两个子域就可以共享cookie信息。当我部署到IIS时,我会创建两个cookie,一个用于域,另一个用于子域。为什么会这样呢?当我更新cookie时,唯一更新的是子域cookie,这使得域cookie变得无用。
我试图通过我的代码来跟踪它,但是在调试模式下运行visual studio实际上根本不会设置任何cookie,除非我没有设置cookie.domain属性。如果省略domain.cookie,我会得到一个设置为localhost的cookie,但只有一个cookie。有什么想法吗?
发布于 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。现在我只有一块饼干了。
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;
}发布于 2012-02-16 07:08:05
您可以在httpCookies上为web.config上的全域和子域设置此cookie名称
<httpCookies domain="domain.com" httpOnlyCookies="false" requireSSL="false" />设置domain.com而不是www.domain.com来归档您所说的内容,以便在域和子域上拥有相同的cookie。类似地,还有一个关于身份验证的参数,您可以根据您所说的cookie来设置此cookie设置。
在你的问题“为什么会这样?”答案是,如果不为cookies设置此参数,则cookies实际上使用当前主机名,因此如果子域的名字发生变化,它们将不同。
https://stackoverflow.com/questions/9302498
复制相似问题