我有两个站点,都在同一个域上,但是有不同的子域。
site1.mydomain.example
site2.mydomain.example
一旦我在两个站点中进行验证,然后查看随后请求中包含的cookie,它们对于每个站点都是相同的。
然而,如果我先登录第一个站点,然后导航到另一个站点,我期望我的来自站点1的cookie将与发送到站点2的请求一起发送,但事实并非如此。这是我的cookie的属性。
登录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中,因为它只在客户端上需要。
我已确保每个表单的设置都相同。
我已确保两个Web配置文件中我的机器密钥设置相同。
我不知道为什么这不起作用。就我所知,当它们都使用相同的身份验证cookie时,一个子域和另一个子域之间的客户端发送cookie时包含什么内容?
如果您想查看更多信息,请在下面留言。我已经苦恼了两天。根据这篇文章,这应该可以工作。
添加的代码:
这是我的身份验证的配置文件设置。这在两个网站中都使用。
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn"
defaultUrl="~/Home/Index"
name="MySite"
protection="All"
path="/"
domain="mydomain.example"
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.example";
HttpContext.Response.Cookies.Add(cookie);
HttpContext.Response.Redirect(site2Url,true);
更新2:
在测试时,我注意到了一些奇怪的事情。当我向site1的响应中添加一个cookie时,它会被添加到此目录中... C:\Users\jreddy\AppData\Roaming\Microsoft\Windows\Cookies
当我向site2的响应中添加一个cookie时,它将被添加到此目录中... C:\Users\jreddy\AppData\Roaming\Microsoft\Windows\Cookies\Low
这可能是我的问题所在。难道我的一个站点包含在本地内部网区域中吗?
更新3:找到问题,解决方案未知 似乎我的问题与我的第二个站点是本地内部网区域的一部分有关。如果我使用Firefox访问Site1,它可以工作,但是我必须输入我的Windows凭据。如果我通过IE访问,则我的凭据会自动获取,但是无法读取site2的cookie。我可能会在另一个问题中提问。