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

RPM*_*984 19 asp.net cookies asp.net-mvc forms-authentication cross-platform

情况如下:

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

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

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

我所确保的:

  1. cookie的域名设置为"example.com"(这意味着子域名可以访问.证明是其他网站可以"看到"cookie).
  2. 两个网站共享相同的机器密钥.两者的web.config具有与decryptionKey和validationKey相同的值.
  3. 两个网站的表单身份验证票证版本和cookie名称相同.
  4. 路径设置为"/".

我以前做过这个并且它工作正常,但在那种情况下,两个应用程序共享相同的代码库.

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

任何人都可以告诉我我缺少什么,或提供替代解决方案.

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

RPM*_*984 39

当您创建新的ASP.NET 4.5(例如ASP.NET MVC 4)应用程序时,以下行添加到web.config:

<httpRuntime targetFramework="4.5" />
Run Code Online (Sandbox Code Playgroud)

这在我的其他应用程序中不存在,可能是因为我的其他应用程序是ASP.NET 3.5应用程序,它已升级到4.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元素.

  • 感谢RPM,刚才我们在Pluralsight遇到了同样的问题.完全与compat模式有关. (2认同)

Man*_*ngu 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" />
Run Code Online (Sandbox Code Playgroud)

你现在不需要从httpruntime中删除targetFramework ="4.5".