Asp.net
在同一域的兩個網站之間共享 cookie
情況如下:
- 網站 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)。
當您創建一個新的 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元素。