我有两个站点,都在同一个域上,但具有不同的子域.
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.我可能会在另一个问题中问这个问题.

推荐答案

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

喜欢

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

UPDATE 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多行查询文本框中的多个名称并将结果添加到单个网格视图

逐步 ASP.NET 自动构建/部署

如何在 C# 中生成一个随机的 10 位数字?

我可以在一个 Web 项目中有多个 web.config 文件吗?

如何将 JQuery 与母版页一起使用?

HttpResponse 的区别:SetCookie、AppendCookie、Cookies.Add

ASP.NET Core 1.0 ConfigurationBuilder().AddJsonFile("appsettings.json");找不到文件

未知的网络方法.参数名称:methodName

在控制器 asp.net mvc 5 的视图上显示错误消息

HttpWebRequest 未通过凭据

MvcBuildViews true 与 ASP.NET MVC 2 中的实体框架

返回 IHttpActionResult vs IEnumerable vs IQueryable

最佳服务器端 .NET PDF 编辑库

如何在同一解决方案中从 MVC 项目调试 Web API 项目

ASP.NET 会话超时测试

测试 Web 表单应用程序 (ASP.NET) 的最佳方法是什么

实体框架:如何解决外键约束可能导致循环或多个级联路径?

如何从 ASP.NET 中的数据表/数据视图中 Select 前 n 行

在 ASP.NET MVC 中模拟 User.Identity

可以在不 destruct 站点的情况下将 MIME 类型添加到 web.config 吗?