Форма входа в Asp.net Невозможно, когда время клиента отличается от времени сервера - PullRequest
1 голос
/ 23 ноября 2011
FormsAuthenticationUserData userData = new FormsAuthenticationUserData(member.Id, member.Role, member.Gender);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, member.UserName, DateTime.Now, DateTime.Now.AddHours(24), true, userData.Serialize());
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
faCookie.Expires = DateTime.Now.AddHours(25);
Response.Cookies.Add(faCookie);

string redirectUrl = FormsAuthentication.GetRedirectUrl(member.UserName, false);
Response.Redirect(redirectUrl, true);

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie != null)
    {            
        FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
        try
        {
            WebIdentity identity = new WebIdentity(authTicket.Name, authTicket.UserData);
            WebPrincipal currentMember = new WebPrincipal(identity);
            Context.User = currentMember;
        }
        catch
        {
            FormsAuthentication.SignOut();
            FormsAuthentication.RedirectToLoginPage();
            Response.End();
        }
    }
}   

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

что такое решение?

большое спасибо!

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

После прочтения вашего комментария это ожидаемое поведение, которое нельзя изменить.Система делает то, для чего она предназначена.Вы можете установить срок действия файла cookie позже или использовать скользящий тайм-аут, однако пока я не вижу причин, по которым дата и время компьютера могут отсутствовать.

0 голосов
/ 12 октября 2013

Этот метод позволяет полностью не использовать дату и время браузера.

  1. Установите для cookie-файла FormsAuthentication постоянный срок действия или срок его действия через 100 лет.

  2. Сохраните фактический срок действия, основанный на времени сервера, в свойстве authenticationTicket.Expiration. См. здесь .

  3. После того как сервер аутентифицирует запрос, он должен проверить authenticationTicket.Expiration, чтобы увидеть, истек ли он. Я не уверен на 100%, что система делает это автоматически, возможно, вам придется подключиться к событию Application_AuthenticateRequest и сделать это самостоятельно.

  4. Если срок его действия истек, веб-сервер должен отклонить запрос; отобразить код состояния HTTP 403 и заголовок set-cookie для удаления cookie в этот момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...