gpt4 book ai didi

asp.net - 跨子域共享 ASP.NET cookie

转载 作者:行者123 更新时间:2023-12-03 08:58:03 24 4
gpt4 key购买 nike

我有两个站点,都在同一个域上,但具有不同的子域。
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 中,因为它只在客户端上需要)。
我已确保每个表单的设置都相同
我已确保我的机器 key 设置在两个 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。我可能会在另一个问题中问这个问题。

最佳答案

在两个子域网站的每个 Cookie 中将 Domain 的属性设置为“.mydomain.com”


Response.Cookies["test"].Value = "some value";
Response.Cookies["test"].Domain = ".mysite.com";

更新 1

在网站
HttpCookie hc = new HttpCookie("strName", "value");
hc.Domain = ".mydomain.com"; // must start with "."
hc.Expires = DateTime.Now.AddMonths(3);
HttpContext.Current.Response.Cookies.Add(hc);

在站点 B
HttpContext.Current.Request.Cookies["strName"].Value

尝试一下

问候

关于asp.net - 跨子域共享 ASP.NET cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7589630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com