在同一域的两个网站之间共享 cookie
Posted
技术标签:
【中文标题】在同一域的两个网站之间共享 cookie【英文标题】:Sharing a cookie between two websites on the same domain 【发布时间】:2013-02-02 09:21:47 【问题描述】:情况如下:
网站 A,ASP.NET MVC 4 Web 应用程序。域名:http://a.example.com 网站 B,ASP.NET MVC 4 Web 应用程序。域名:http://b.example.com我正在尝试在网站之间共享一个 cookie(表单身份验证)。
我没有使用表单身份验证本身。我正在使用内置方法(加密、解密等),但我正在设置自己的自定义 cookie。
当我在其中一个网站上设置 cookie 时,其他网站会看到 cookie,但无法解密。错误是一般的“加密操作期间发生错误”。
我所保证的:
-
cookie 的域设置为“example.com”(这意味着子域可以访问。证明是其他网站可以“看到”cookie)。
两个网站共享相同的机器密钥。两者的 web.config 具有相同的解密密钥和验证密钥值。
两个网站的表单身份验证票证版本和 cookie 名称相同。
路径设置为“/”。
我以前做过这个,它工作正常,但在那种情况下,两个应用程序共享相同的代码库。
在这种情况下,它们是单独的应用程序。这是因为我正在设计一个解决方案原型,其中同一***域上的两个独立于平台的应用程序可以共享一个身份验证 cookie。
谁能告诉我我缺少什么,或提供替代解决方案。
我已阅读所有相关问题,但答案通常是上面的 2)。
【问题讨论】:
【参考方案1】:当您创建新的 ASP.NET 4.5(例如 ASP.NET MVC 4)应用程序时,将以下行添加到 web.config:
<httpRuntime targetFramework="4.5" />
这在我的其他应用程序中不存在,可能是因为我的其他应用程序是升级到 4.5 的 ASP.NET 3.5 应用程序。
在新的 ASP.NET Web 应用程序中删除该行解决了问题。
我认为这是由于兼容性模式值: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
框架45。 ASP.NET 4.5 的加密增强功能已生效。如果应用程序 Web.config 文件将 httpRuntime 元素的 targetFramework 属性设置为“4.5”,则这是默认值。
不确定我是否明白删除该行如何解决问题。我假设应用程序一具有不同的兼容性模式,因为它没有 httpRuntime
元素。
【讨论】:
感谢 RPM 我们刚才在 Pluralsight 遇到了同样的问题。完全与兼容模式有关。 我在两个使用 .NET 4.5.1 的网站上看到了同样的问题。一个有targetFramework
属性,另一个(不久前从.NET 3.5 升级)没有。在第二个网站中添加属性解决了这个问题。
@RPM1984 ,我面临类似的问题 - 请帮助***.com/questions/34506551/…【参考方案2】:
处理这个问题的最佳方法是让机器密钥解密回退到 Framework20SP2
来自这篇文章:http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
只需将该属性添加到您的 .net 4.5 应用程序中的 machinekey
<machineKey validationKey="" decryptionKey="" validation="SHA1" compatibilityMode="Framework20SP2" />
您现在不需要从 httpruntime 中删除 targetFramework="4.5"。
【讨论】:
@Mandeep ,对我来说它不起作用 - 请帮助 - ***.com/questions/34506551/…以上是关于在同一域的两个网站之间共享 cookie的主要内容,如果未能解决你的问题,请参考以下文章