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

同步不同子域中的Cookie和会话(asp.net),asp.net,cookies,session,Asp.net,Cookies,Session,我正在asp.net中构建一个站点,并且有多个子域。例如 one.cookies.com two.cookies.com 我希望我的用户能够登录到任一子域,并登录到这两个网站。此外,我希望会话和cookies保持同步。到目前为止,我还没有找到一个可靠的方法来做这件事。我相信这是我自己做的饼干。(未列出子域或www)创建cookie时,可以设置域: HttpCookie cookie = new HttpCookie("name", "value"); cookie.Domain = "cooki

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


我希望我的用户能够登录到任一子域,并登录到这两个网站。此外,我希望会话和cookies保持同步。到目前为止,我还没有找到一个可靠的方法来做这件事。

我相信这是我自己做的饼干。(未列出子域或www)

创建cookie时,可以设置域:

HttpCookie cookie = new HttpCookie("name", "value");
cookie.Domain = "cookies.com";
这将允许从cookies.com的所有子域访问您的cookie

如果您使用的是FormsAuthentication,则可以在web.config中设置身份验证cookie的域:

<forms name=".ASPXAUTH"
       loginUrl="login.aspx"
       defaultUrl="default.aspx"
       protection="All"
       timeout="30"
       path="/"
       requireSSL="false"
       domain="cookies.com">
</forms>

请记住,要使单点登录在多个子域上工作,您的ASP.NET应用程序必须共享此代码项目中解释的相同内容


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

是的,您需要使用“.cookies.com”而不是“cookies.com”

如果您想同步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    
}
我在这里找到了这篇文章:

你确定吗?检查这个[,它显示Response.Cookies[“domain”].domain=“contoso.com”;然后说“cookie将可用于主域以及sales.contoso.com和support.contoso.com域。”域应该是“.Cookies.com”,而不是“Cookies.com”看看这个答案:,它要简洁得多,基本上只需将
添加到web.configs。