Я пытаюсь создать сайт ASP.NET, который позволяет каждому пользователю устанавливать собственное значение времени ожидания сеанса.По сути, с точки зрения пользователя, если они устанавливают значение времени ожидания равным 30, то это означает, что после 30 минут бездействия они должны пройти повторную аутентификацию.Если они устанавливают для своего значения тайм-аута значение 0, это означает, что они могут оставить браузер открытым, сколько захотят, и их сеанс никогда не истечет - им никогда не придется повторно проходить аутентификацию.Это отличается от функции «запомнить меня».Если они закроют свой браузер, им придется пройти повторную аутентификацию.
В настоящее время я использую проверку подлинности с помощью форм в своем приложении, и у меня есть один объект, который я храню в сеансе ASP.NET.Этот объект является пользовательским объектом «Пользователь», который содержит несколько различных сведений о текущем пользователе.
Какой код мне нужно написать, чтобы после успешного входа в систему система имела соответствующий билет для проверки подлинности и надлежащийзначение истечения сеанса?Я продолжаю думать, что у меня это работает, и затем я замечаю странные тайм-ауты, когда система, кажется, думает, что я аутентифицирован, но мой сеанс истек.
В настоящее время на моей странице входа я использую элемент управления входом ASP.NET.У меня есть пользовательский код в событии Login_Authenticate для авторизации пользователя.Затем у меня есть следующий код в событии Login_LoggedIn для установки билета аутентификации.
HttpCookie _authCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket _oldAuthTicket = FormsAuthentication.Decrypt(_authCookie.Value);
HttpContext.Current.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
FormsAuthenticationTicket _newAuthTicket;
if(myObject.LoginTimeout > 0)
{
_newAuthTicket = new FormsAuthenticationTicket(_oldAuthTicket.Version, _oldAuthTicket.Name, DateTime.Now, DateTime.Now.AddMinutes(myObject.LoginTimeout), _oldAuthTicket.IsPersistent, _oldAuthTicket.UserData, FormsAuthentication.FormsCookiePath);
}
else
{
_newAuthTicket = new FormsAuthenticationTicket(_oldAuthTicket.Version, _oldAuthTicket.Name, DateTime.Now, DateTime.Now.AddYears(10), _oldAuthTicket.IsPersistent, _oldAuthTicket.UserData, FormsAuthentication.FormsCookiePath);
}
string _encryptedTicket = FormsAuthentication.Encrypt(_newAuthTicket);
_authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, _encryptedTicket);
HttpContext.Current.Response.Cookies.Add(_authCookie);