Тайм-аут параметра, который вы нашли в /system.web/authentication/forms
, является таймаутом (в минутах) от продолжительности проверки подлинности.
Это означает, что после определенного количества времени бездействия пользователю будет предложено снова войти в систему. Если вы попытаетесь проверить это My.Profile.Current.IsAuthenticated
, это будет false
.
Вы можете не сохранять cookie. В этой ситуации, если ваш билет истекает, ваш файл cookie также истекает. Файл cookie (в случае сохранения) имеет целью запомнить пользователя, вернется ли он на ваш сайт.
Возможно, вы захотите сохранить свой файл cookie в течение 10 лет, чтобы пользователю не нужно было снова вводить имя пользователя и пароль, если только они не захотели удалить файл cookie. Файл cookie действителен, даже если браузер закрыт (когда он сохраняется).
Еще одна важная вещь, чтобы помнить параметр slidingExpiration:
<authentication mode="Forms">
<forms loginUrl="~/Partner/LogOn" defaultUrl="~/Home/Index"
timeout="30" slidingExpiration="true" />
</authentication>
, если это правда, билет проверки подлинности будет обновляться каждый раз есть активность на вашем сайте: обновление страницы и т.д.
Что вы может сделать - и то, что я сделал - это написать свои собственные кук, как это:
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
Update
Я реализовал эту рутинную, потому что я хочу, чтобы хранить свои группы в зашифрованном печенье:
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, чтобы проверить, действительно ли аутентификация действительна.Если нет, я снова прочитал печенье, получить имя пользователя и пароль, и проверить его на БД:
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-формате), где я помещаю свой пароль и группы.
привет, извините, я знаю, что это был слишком старый, но просто любопытный, зачем хранить его в формате json? пароль и группы. Я очень новичок в mvc, поэтому я все еще пытаюсь понять концепции и лучшие практики в разработке с ним. спасибо! – gdubs
@ gdubs: Да, я знаю. Это немного необычно. Я мог бы выбрать другой формат, но мне нравится JSON. Кроме того, с MVC вы, как правило, используете JSON довольно много, поэтому я принял его как стандарт. – LeftyX