【问题标题】:sync cookies and sessions in different subdomains (asp.net)同步不同子域中的 cookie 和会话 (asp.net)
【发布时间】:2010-10-01 10:28:20
【问题描述】:

我在 asp.net 中建立一个站点,并有多个子域。例如, one.cookies.com 二.cookies.com

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

【问题讨论】:

  • 查看这个答案:stackoverflow.com/a/3774627/8360,它更简洁,您基本上只需将<httpCookies domain=".yourdomain.com" /> 添加到您的 web.configs 中。

标签: asp.net cookies session


【解决方案1】:

如果您想要同步 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

【讨论】:

    【解决方案2】:

    创建 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 应用程序必须共享相同的 machine keys,如本 CodeProject article 中所述。

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

    【讨论】:

    • 域名应该是“.cookies.com”而不是“cookies.com”
    【解决方案3】:

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

    【讨论】:

    • 你确定吗?检查一下 [msdn.microsoft.com/en-us/library/ms178194.aspx],它显示 Response.Cookies["domain"].Domain = "contoso.com";然后说“该 cookie 将可用于主域以及 sales.contoso.com 和 support.contoso.com 域。”
    【解决方案4】:

    我相信为http://cookies.com 制作cookie。 (未列出子域或 www)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2021-07-27
      • 2012-04-22
      • 2014-01-04
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      相关资源
      最近更新 更多