User.Identity.IsAuthenticated иногда возвращает false
Я использую asp.net 4.0 и аутентификацию формы. Чтобы проверить, аутентифицирован ли пользователь или нет, я использую User.Identity.IsAuthenticated. Большую часть времени он работает отлично, но я не знаю как, иногда он возвращает false, даже если у пользователя есть авторизация. Мой web.config:
<authentication mode="Forms">
<forms name=".xyz" loginUrl="~/" timeout="120" protection="All" path="/" slidingexpiration=true/>
</authentication>
В global.asax:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if (authCookie == null)
{
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch
{
return;
}
if (authTicket == null)
{
return;
}
string[] roles = authTicket.UserData.Split(new char[] { '|' });
FormsIdentity id = new FormsIdentity(authTicket);
GenericPrincipal principal = new GenericPrincipal(id, roles);
Context.User = principal;
}
и на странице входа в систему:
FormsAuthenticationTicket authTick = new FormsAuthenticationTicket(1, email.Text, DateTime.Now, DateTime.Now.AddDays(360), true, password.Text, FormsAuthentication.FormsCookiePath);
string encriptTicket = FormsAuthentication.Encrypt(authTick);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encriptTicket);
authCookie.Expires = DateTime.Now.AddDays(360);
Response.Cookies.Add(authCookie);
Я также использую запрос ajax каждые 5 минут. чтобы сохранить сессию живой, и это также сбрасывает время ожидания аутентификации, потому что значение скользящего выдоха Я не знаю, что с этим не так. иногда в том же сеансе и в ту же минуту он возвращает false для одной страницы, даже если он возвращает true для всех других страниц. Я никогда не получал эту ошибку, но мои посетители утверждают об этой проблеме.
1 ответ
Я нашел проблему. Проблема была в разнице между www.address.com и address.com. www версия претендует как поддомен и создает новую сессию и авторизацию. Если сервер перенаправляет на адрес www, когда пользователь пришел без префикса www, происходит ошибка. Я постараюсь переписать URL, чтобы решить это.