我有两个站点,都在同一个域上,但具有不同的子域.
site1.mydomain.com
site2.mydomain.com
一旦对每个站点进行了身份验证,我会查看后续请求中包含的cookie,它们对于每个站点都是相同的.
然而,如果我登录到第一个站点,然后导航到另一个站点,我希望我的cookie从站点1与请求一起发送到站点2,但事实并非如此.以下是我的cookies 的属性.
登录Site1后,此cookie即存在
Name = MySite
Domain =
Has Keys = False
HttpOnly = False
Path = /
Value = 1C41854066B03D8CC5679EA92DE1EF427DAC65D1BA0E672899E27C57245C1F0B7E93AB01B5563363AB4815A8F4BDE9D293FD261E03F8E60B8497ABBA964D8D315CCE1C8DD220C7176E21DC361935CF6
Expires = 1/1/0001 12:00:00 AM
登录Site2后,这些cookie就会存在.
Name = MySite
Domain =
Has Keys = False
HttpOnly = False
Path = /
Value = C8C69F87F993166C4D044D33F21ED96463D5E4EB41E1D986BF508DA0CBD5C2CA7D782F59F3BC96871108997E899FF7401C0D8615705BDB353B56C7E164D2302EE6731F41705016105AD99F4E0578ECD2
Expires = 1/1/0001 12:00:00 AM
我已经在每个应用程序上设置了域(不会显示在请求cookie中,因为它只在客户端上需要).
我不明白为什么这不管用.据我所知,当一个cookie包含哪些内容时,客户端会将其发送给一个子域,而不是另一个子域,因为它们都使用相同的身份验证cookie?
如果你想看到更多信息,请发表 comments .我已经为此挣扎了两天了.根据this article,这应该是有效的.
添加了UPDATE:个代码
以下是我用于身份验证的配置文件设置.这两个站点都使用此选项.
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn"
defaultUrl="~/Home/Index"
name="MySite"
protection="All"
path="/"
domain="mydomain.com"
enableCrossAppRedirects="true"
timeout="2880"
/>
下面是我在Site1中创建cookie的代码.
//Add a cookie that the Site2 will use for Authentication
var cookie = FormsAuthentication.GetAuthCookie(userName, true);
cookie.Name = "MySite";
cookie.HttpOnly = false;
cookie.Expires = DateTime.Now.AddHours(24);
cookie.Domain = "mydomain.com";
HttpContext.Response.Cookies.Add(cookie);
HttpContext.Response.Redirect(site2Url,true);
UPDATE 2:
我在测试时发现了一些奇怪的东西.当我向site1的响应中添加cookie时,它会被添加到这个目录中...
当我向站点的响应添加cookie时,它会被添加到这个目录中...
这可能是我的问题.是不是我的一个网站包含在本地intranet区域?
发现UPDATE 3:个问题,解决方案未知 我的问题似乎与我的第二个站点是本地Intranet区域的一部分有关.如果我使用Firefox转到Site1,它可以工作,但我必须输入我的Windows凭据.如果我通过IE,我的凭据会自动提取,但站点2无法读取Cookie.我可能会在另一个问题中问这个问题.