Синхронизировать файлы 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)