Ответ 1
Тайм-аут параметра, который вы нашли в /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 аутентификации и билета аутентификации с тем же самым таймаутом (только при сохранении).
Еще одна вещь, которую я пробовал, - это сохранить имя пользователя и пароль в зашифрованном файле 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-формате), где я помещаю свой пароль и группы.