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

22

以下是情况说明:

我正在尝试在这些网站之间共享一个cookie(表单验证)。

我没有使用表单验证,而是使用内置方法(Encrypt,Decrypt等),但我设置了自己的自定义cookie。

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

我已经确保以下事项:

  1. cookie的域设置为“example.com”(这意味着子域可以访问。证明是另一个网站可以“看到”cookie)。
  2. 两个网站共享相同的机器密钥。两者的web.config文件具有相同的解密密钥和验证密钥的值。
  3. 表单验证票证版本和cookie名称在两个网站中均相同。
  4. 路径设置为“/”。

我以前做过这个,并且效果很好,但在那种情况下,两个应用程序共享相同的代码库。

在这种情况下,它们是单独的应用程序。这是因为我正在原型设计解决方案,使得在同一顶级域上的两个平台无关的应用程序可以共享身份验证cookie。

有人能告诉我缺少什么,或提供替代方案吗?

我已经阅读了所有相关的问题,但答案通常是上述第2点。

2个回答

40

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

當您創建一個新的ASP.NET 4.5應用程序(例如ASP.NET MVC 4)時,以下行將被添加到web.config文件中:

<httpRuntime targetFramework="4.5" />

可能是因为我其他的应用程序是一个 ASP.NET 3.5 应用程序,然后升级到了 4.5 版本,所以在其他应用程序中没有出现这种情况。

在新的 ASP.NET Web 应用程序中删除那行代码解决了问题。

我认为这是由于兼容性模式值所致:http://msdn.microsoft.com/zh-cn/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

Framework45。ASP.NET 4.5 的加密增强功能已生效。如果应用程序的 Web.config 文件具有 httpRuntime 元素的 targetFramework 属性设置为 "4.5",则此值为默认值。

不确定如何理解删除那行代码如何解决问题。我猜测应用程序一具有不同的兼容性模式,因为它没有那个httpRuntime元素。


2
谢谢RPM,我们在Pluralsight这边也刚刚遇到了同样的问题。完全与兼容模式有关。 - Keith Sparkjoy - Pluralsight
我曾经在两个使用.NET 4.5.1的网站上看到了同样的问题。其中一个有targetFramework属性,另一个(从.NET 3.5升级了一段时间)没有。在第二个网站中添加该属性解决了该问题。 - Richard Ev
@RPM1984,我遇到了类似的问题-请帮忙。http://stackoverflow.com/questions/34506551/reading-cookie-value-using-url-rewrite-provider-module-unable-to-validate-at - kudlatiger

15

@Mandeep ,对我来说它不起作用 - 请帮助 - http://stackoverflow.com/questions/34506551/reading-cookie-value-using-url-rewrite-provider-module-unable-to-validate-at - kudlatiger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接