У моего проекта возникла проблема с обновлением сеанса аутентификации форм из-за противоречивых форм Auth Cookies.Ошибка обновления аутентификации форм с аутентификацией пользовательских форм
Подробное описание:
После того как пользователь вошел в систему, один формирует куки аутентификации (FACookieA) создан, и он/аутентификацию. Однако, когда дело доходит до обновления файла cookie, создается вторая форма auth cookie (FACookieB), и FACookieA не обновляется. Пользователь перенаправляется на страницу входа на страницу после истечения срока действия в FACookieA, даже до истечения срока действия в FACookieB.
Сформированные печенье:
Пожалуйста, обратите внимание, что оба печенья имеют такое же имя.
FACookieA:
name: FormsAuth
domain: .formsauth.com
обратите внимание на "" предварительно дополнено .NET, то "formsauth.com" от форм раздела Authentication Ticket
FACookieB:
name: FormsAuth
host: a.formsauth.com
обратите внимание на печенье использует "хозяин", а не домен, а «а. formsauth.com "основан на текущем домене url запроса. URL
Проект испытания:
a.formsauth.com
Web.config:
<forms loginUrl="~/Account/Login.aspx" name="FormsAuth"/>
Код
public partial class Account_Login : System.Web.UI.Page
{
protected void LoginButton_Click(object sender, EventArgs e)
{
if (Membership.ValidateUser(LoginUser.UserName.Trim(), LoginUser.Password.Trim()))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
"username",
DateTime.Now,
DateTime.Now.AddMinutes(2),
false,
string.Empty
);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.Domain = "formsauth.com";
cookie.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Remove(cookie.Name);
Response.Cookies.Add(cookie);
Response.Redirect("~/Account/ChangePassword.aspx"); //authenticated area
}else
{
Response.Write("Invalid UserID and Password");
}
}
}
Вопросы:
1) Как сгенерировать один файл auth cookie форм, чтобы пользователи могли продлить сеанс auth и не вышли из системы?
соображения:
1) Проект должен поддерживать несколько языков, с возможными форматами домена ниже:
a.formsauth.com
a.en.formsauth.com
a.us.formsauth.com
и
b.formsauth.com
b.en.formsauth.com
b.us.formsauth.com
Таким образом, я не могу установить домен атрибут элемента Forms декларативно. Поскольку два набора доменов не могут совместно использовать cookie, разрешено совместное использование cookie в пределах одного набора. Это же база кода используется для разных приложений с разными доменами. Но один набор доменов может совместно использовать cookie.
2) Встроенный FormsAuthenticationModule по умолчанию обновляет cookie сеанса пользователя, поэтому я не могу контролировать домен в cookie. Обратите внимание: FormsAuthenticationTicket используется для создания файла cookie при использовании логина, как показано выше.
Любая идея?
Пожалуйста, пост код, который обновляет куки – Mike
вы установите 'печенье. Domain = "formsauth.com"; 'когда вы обновляете cookie? –
Я не очень хорошо помню ASP.NET Forms Auth, так что это может вообще не работать с вашей реализацией, но вы попробовали добавить 'slideExpiration =" true "cookieless =" UseCookies "timeout =" x "' в ' 'в вашем web.config? 'x' - это время в минутах бездействия, прежде чем пользователь снова войдет в систему. –