Тайм-аут параметра, который вы нашли в /system.web/authentication/forms
, является тайм-аутом (в минутах) продолжительности билета аутентификации.
Это означает, что после определенного периода бездействия пользователю предлагается снова войти в систему. Если вы попытаетесь проверить это My.Profile.Current.IsAuthenticated
, это будет false
.
Вы можете не сохранять cookie. В этом случае, если срок действия вашего билета истекает, срок действия вашего cookie также истекает. Файл cookie (в случае, если он сохраняется) имеет целью запомнить пользователя, если он / она возвращается на ваш сайт.
Возможно, вы захотите сохранить ваш файл cookie в течение 10 лет, чтобы пользователю больше никогда не приходилось вводить имя пользователя и пароль, если только он не решил удалить этот файл cookie. Файл cookie действителен, даже если браузер закрыт (если он сохраняется).
Еще одна важная вещь, которую нужно запомнить, это параметр slideExpiration:
<authentication mode="Forms">
<forms loginUrl="~/Partner/LogOn" defaultUrl="~/Home/Index"
timeout="30" slidingExpiration="true" />
</authentication>
если это правда, ваш билет для проверки подлинности будет обновляться при каждой активности на вашем сайте: обновление страницы и т. Д.
Что вы можете сделать - и то, что я сделал, - написать свой собственный файл cookie, например, так:
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(1, //version
userName, // user name
DateTime.Now, //creation
DateTime.Now.AddMinutes(30), //Expiration (you can set it to 1 month
true, //Persistent
userData); // additional informations
Обновление
Я реализовал эту процедуру, потому что хочу сохранить свои группы в зашифрованном файле cookie:
Dim authTicket As System.Web.Security.FormsAuthenticationTicket = _
New System.Web.Security.FormsAuthenticationTicket( _
1, _
UserName, _
Now, _
Now.AddYears(100), _
createPersistentCookie, _
UserData)
Dim encryptedTicket As String = System.Web.Security.FormsAuthentication.Encrypt(authTicket)
Dim authCookie As HttpCookie = New HttpCookie( _
System.Web.Security.FormsAuthentication.FormsCookieName, _
encryptedTicket)
If (createPersistentCookie) Then
authCookie.Expires = authTicket.Expiration
End If
Response.Cookies.Add(authCookie)
Как вы можете видеть, я установил истечение срока действия куки-файла аутентификации и билета аутентификации с одним и тем же тайм-аутом (только при сохранении).
Еще одна вещь, которую я пробовал - сохранить имя пользователя и пароль в зашифрованном cookie.
Каждый раз, когда загружается главная страница, я проверяю My.Profile.Current.IsAuthenticated, чтобы убедиться, что аутентификация все еще действительна. Если нет, я снова читаю cookie, получаю имя пользователя и пароль и проверяю его в БД:
Public Function ReadCookieAuthentication(ByVal Context As System.Web.HttpContext) As Security.CookieAuth
Dim CookieUserData = New Security.CookieAuth()
Dim cookieName As String = System.Web.Security.FormsAuthentication.FormsCookieName
Dim authCookie As HttpCookie = Context.Request.Cookies(cookieName)
If (Not (authCookie Is Nothing)) Then
Dim authTicket As System.Web.Security.FormsAuthenticationTicket = Nothing
Try
authTicket = System.Web.Security.FormsAuthentication.Decrypt(authCookie.Value)
If (Not (authTicket Is Nothing)) Then
If (authTicket.UserData IsNot Nothing) AndAlso Not String.IsNullOrEmpty(authTicket.UserData) Then
CookieUserData = New JavaScriptSerializer().Deserialize(Of Security.CookieAuth)(authTicket.UserData.ToString)
End If
CookieUserData.UserName = authTicket.Name
End If
Catch ex As Exception
' Do nothing.
End Try
End If
Return (CookieUserData)
End Function
Security.CookieAuth - это объект, который я создал для возврата имени пользователя и пароля.
CookieUserData - это хранилище (я сохраняю в формате json), куда я помещаю свой пароль и группы.