跨域 Cookie 问题 (ASP.NET)

Posted

技术标签:

【中文标题】跨域 Cookie 问题 (ASP.NET)【英文标题】:Cross Domain Cookies Problem (ASP.NET) 【发布时间】:2011-02-12 12:09:00 【问题描述】:

我遇到了跨域 cookie 的问题。我阅读了很多关于在子域之间共享 cookie 的文档。所有文章的主要思想是将域属性设置为“.mydomain.com”。我在本地 IIS 服务器上创建了两个域 - test1.local.bootest2.local.boo。它们在浏览器中运行良好且可见。我有以下代码:

站点 test1 - 写入 cookie:

HttpCookie myCookie = new HttpCookie("TestCookie");
myCookie.Domain = ".local.boo";
myCookie["msg"] = "Welcome from Cookie";
Response.Cookies.Add(myCookie);

站点 test2 - 读取 cookie:

HttpCookie cookie = Request.Cookies["TestCookie"];
if (cookie != null)

    Response.Write(cookie["msg"]);

else

    Response.Write("FAILED");

此代码始终显示 FAILED 消息。所以这意味着第二个站点无法从同一个子域读取 cookie。我的错在哪里??

【问题讨论】:

【参考方案1】:

在 IIS 7 中

将此添加到您的 web.config

<system.webserver>
    <httpProtocol>
        <customHeaders>
            <add name="p3p" value="CP=&quot;NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM&quot;" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

在 II6 中。

运行inetmgr 展开[服务器] > 网站 [您的网站]中的右键单击 属性 HTTP 标头 添加... 自定义标题名称:p3p 自定义标头值:CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM" 好的 好的

【讨论】:

两个座位都必须有这个吗?这些选项记录在哪里?【参考方案2】:

嗯...问题出在浏览器上...Opera 浏览器不会将 cookie 发送到同一子域上的其他站点。 Firefox 和 IE 效果很好。无论如何,谢谢你们!

一些注意事项:如果您想从其他子域中删除此类 cookie,则需要将域属性设置为:.mydomain.com - 我花了很多时间试图弄清楚。希望它对某人有所帮助

【讨论】:

【参考方案3】:

尝试将到期日期设置为将来的某个时间点:

cookie.Expires = DateTime.Now.AddYears(5);

【讨论】:

【参考方案4】:

您可以使用fiddler 等网络调试器检查浏览器是否正在返回cookie 标头。

它将显示为每个请求和响应发送的标头和 cookie,因此您可以查看是否设置了正确的域以及对第二个域的请求会发生什么。

【讨论】:

【参考方案5】:

尝试设置 expires 属性,或者在用户会话结束时将其删除。

【讨论】:

以上是关于跨域 Cookie 问题 (ASP.NET)的主要内容,如果未能解决你的问题,请参考以下文章

C# asp.net 如何跨域获取cookie

使用 FormsAuthentication 的跨域 Cookie

ASP.NET与ASP.NET Core用户验证Cookie并存解决方案

asp.net mvc 文件跨域上传,接收返回结果

AJAX跨域调用ASP.NET MVC或者WebAPI服务的解决方案

在 ASP.NET Webforms 中启用跨域请求