синхронизировать файлы cookie и сеансы в разных поддоменах (asp.net)

Я создаю сайт на asp.net и имею несколько поддоменов. Например, one.cookies.com two.cookies.com

Я хочу, чтобы мои пользователи могли входить в систему на любом поддомене и входить на оба сайта. Кроме того, я бы хотел, чтобы сеансы и файлы cookie синхронизировались. Пока я не нашел надежного способа сделать это.


person Community    schedule 14.01.2009    source источник
comment
Посмотрите этот ответ: stackoverflow.com/a/3774627/8360, он намного лаконичнее, вы просто добавляете <httpCookies domain=".yourdomain.com" /> в ваш web.configs.   -  person Zachary Yates    schedule 15.01.2016


Ответы (4)


При создании файла cookie вы можете указать домен:

HttpCookie cookie = new HttpCookie("name", "value");
cookie.Domain = "cookies.com";

Это позволит вашему cookie быть доступным со всех поддоменов cookie.com.

Если вы используете FormsAuthentication, вы можете установить домен для cookie аутентификации в web.config:

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

Помните, что для того, чтобы единый вход работал на нескольких поддоменах, ваши приложения ASP.NET должны использовать один и тот же машинные ключи, как описано в этом CodeProject статья.

Совместное использование сеансов между разными поддоменами (разными рабочими процессами) сложнее, потому что сеансы ограничены приложением, и вам придется реализовать собственный механизм синхронизации сеансов.

person Darin Dimitrov    schedule 14.01.2009
comment
Домен должен быть .cookies.com, а не cookies.com. - person ErJab; 15.10.2011

Если вы хотите синхронизировать сеанс 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

person D. Tony    schedule 11.09.2009

Да, вам нужно использовать ".cookies.com", а не "cookies.com"

person Community    schedule 27.01.2009
comment
Уверены ли вы? Проверьте это [msdn.microsoft.com/en-us/library/ms178194 .aspx], отображается Response.Cookies [домен] .Domain = contoso.com; затем сообщает, что файл cookie будет доступен для основного домена, а также для доменов sales.contoso.com и support.contoso.com. - person Shane N; 22.09.2010

Я полагаю, что файл cookie создан для http://cookies.com. (Субдомен или www не указаны)

person John Hoven    schedule 14.01.2009