同步不同子域中的cookie和会话(asp.net)

10 asp.net cookies session

我正在asp.net中构建一个站点,并有多个子域.例如,one.cookies.com two.cookies.com

我希望我的用户能够在任一子域登录并登录这两个网站.另外,我希望会话和cookie同步.到目前为止,我还没有找到一种可靠的方法来做到这一点.

小智 9

如果要同步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    
}
Run Code Online (Sandbox Code Playgroud)

我发现这个最初发布在这里:http: //www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx


Dar*_*rov 8

创建cookie时,您可以设置域:

HttpCookie cookie = new HttpCookie("name", "value");
cookie.Domain = "cookies.com";
Run Code Online (Sandbox Code Playgroud)

这样,您就可以从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>
Run Code Online (Sandbox Code Playgroud)

请记住,对于在多个子域上工作的单点登录,ASP.NET应用程序必须共享相同的计算机密钥,如本CodeProject 文章中所述.

在不同子域(不同的工作进程)之间共享会话更加困难,因为会话受限于应用程序,您必须实现自定义会话同步机制.

  • 该域名应为".cookies.com"而非"cookies.com" (8认同)