Asp.net
同步不同子域中的 cookie 和會話 (asp.net)
我在 asp.net 中建立一個站點並有多個子域。例如,one.cookies.com two.cookies.com
我希望我的使用者能夠登錄任一子域並登錄兩個網站。此外,我希望會話和 cookie保持同步。到目前為止,我還沒有找到可靠的方法來做到這一點。
創建 cookie 時,您可以設置域:
HttpCookie cookie = new HttpCookie("name", "value"); cookie.Domain = "cookies.com";這將允許從 cookies.com 的所有子域訪問您的 cookie。
如果您使用的是 FormsAuthentication,那麼您可以在 web.config 中為 auth cookie 設置域:
<forms name=".ASPXAUTH" loginUrl="login.aspx" defaultUrl="default.aspx" protection="All" timeout="30" path="/" requireSSL="false" domain="cookies.com"> </forms>請記住,要在多個子域上執行單點登錄,您的 ASP.NET 應用程序必須共享相同的機器密鑰,如本 CodeProject文章中所述。
在不同的子域(不同的工作程序)之間共享會話更加困難,因為會話受限於應用程序,您必須實現自定義會話同步機制。
如果您想要同步 ASP.NET 會話並且您沒有使用表單身份驗證(例如,您的站點沒有登錄),請嘗試將以下程式碼添加到您的 Globals.asax 文件中。這對我來說就像一個冠軍,並為我節省了一些嚴重的悲傷。
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) { /// only apply session cookie persistence to requests requiring session information #region session cookie if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState ) { /// Ensure ASP.NET Session Cookies are accessible throughout the subdomains. if (Request.Cookies["ASP.NET_SessionId"] != null && Session != null && Session.SessionID != null) { Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID; Response.Cookies["ASP.NET_SessionId"].Domain = ".know24.net"; // the full stop prefix denotes all sub domains Response.Cookies["ASP.NET_SessionId"].Path = "/"; //default session cookie path root } } #endregion }我發現這個最初發佈在這裡: http ://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx