在同一个域上的两个网站之间共享cookie

时间:2013-02-18 00:48:30

标签: asp.net asp.net-mvc cookies cross-platform forms-authentication

情况如下:

我正在尝试在网站之间共享Cookie(表单身份验证)。

我没有使用表格身份验证本身。我正在使用内置方法(加密,解密等),但我正在设置自己的自定义cookie。

当我在其中一个网站上设置cookie时,其他人会看到cookie,但无法解密。错误是通用“加密操作期间发生错误”。

我所确保的:

  1. Cookie的域名设置为“example.com”(这意味着子域名可以访问。证据是其他网站可以“查看”Cookie)。
  2. 两个网站共享相同的机器密钥。两者的web.config具有与decryptionKey和validationKey相同的值。
  3. 两个网站的表单身份验证票证版本和Cookie名称相同。
  4. 路径设置为“/”。
  5. 我以前做过这个并且它工作正常,但在这种情况下,两个应用程序共享相同的代码库。

    在这种情况下,它们是单独的应用程序。这是因为我正在构建一个解决方案,其中同一顶级域上的两个独立于平台的应用程序可以共享身份验证cookie。

    任何人都可以告诉我我缺少的东西,或提供替代解决方案。

    我已经阅读了所有相关问题,但答案通常是2)。

2 个答案:

答案 0 :(得分:39)

创建新的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

  

Framework45。 ASP.NET 4.5的加密增强功能正在生效。如果应用程序Web.config文件将httpRuntime元素的targetFramework属性设置为“4.5”,则这是默认值。

不确定我是如何删除该线解决问题的。我假设应用程序有一个不同的兼容性模式,因为它没有httpRuntime元素。

答案 1 :(得分:14)

处理此问题的最佳方法是使machinekey解密回退到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”。