【发布时间】:2011-11-27 05:25:21
【问题描述】:
我有两个网站,都在同一个域中,但具有不同的子域。
site1.mydomain.com
site2.mydomain.com
一旦我在每个站点上通过了身份验证,我就会查看后续请求中包含的 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 包含什么?
如果您想查看更多信息,请发表评论。我已经为此苦苦挣扎了两天了。根据this article,这应该可以工作。
更新:添加了代码
这是我的身份验证配置文件设置。这在两个站点中都使用。
<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);
更新 2:
我在测试时发现了一些奇怪的东西。当我在 site1 的响应中添加一个 cookie 时,它会被添加到这个目录中...... C:\Users\jreddy\AppData\Roaming\Microsoft\Windows\Cookies
当我将 cookie 添加到站点的响应中时,它会添加到此目录中... C:\Users\jreddy\AppData\Roaming\Microsoft\Windows\Cookies\Low
这可能是我的问题。会不会是我的某个网站包含在本地 Intranet 区域中?
更新 3: 发现问题,解决方案未知 看来我的问题与我的第二个站点是本地 Intranet 区域的一部分有关。如果我使用 Firefox 访问 Site1,它可以工作,但我必须输入我的 Windows 凭据。如果我通过 IE,我的凭据会自动获取,但 site2 无法读取 cookie。我可能会在另一个问题中问这个问题。
【问题讨论】:
-
domain="mydomain.com" 应该是 domain=".mydomain.com" (注意前导句点)
-
对我来说,我的问题是我忘记了 Web.config 调试转换 -_-
标签: asp.net authentication cookies