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

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

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

Ответ 1

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

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

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

Если вы используете FormsAuthentication, вы можете установить домен для файла cookie auth в файле 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 статья.

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

Ответ 2

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

Ответ 3

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

Ответ 4

Я верю, что cookie для http://cookies.com. (Нет субдомена или www)