Limit czasu parametru znaleziony w /system.web/authentication/forms
to limit czasu (w minutach) czasu trwania biletu uwierzytelniającego.
Oznacza to, że po pewnym czasie braku aktywności użytkownik jest monitowany o ponowne zalogowanie. Jeśli spróbujesz sprawdzić to My.Profile.Current.IsAuthenticated
, będzie to false
.
Możesz zdecydować, aby nie utrwalać pliku cookie. W takiej sytuacji, jeśli wygasa Twój bilet, wygasa również Twój plik cookie. Cookie (w przypadku jest trwałe) ma na celu zapamiętanie użytkownika, jeśli wróci do witryny.
Możesz chcieć przechowywać plik cookie przez 10 lat, aby użytkownik nie musiał już wstawiać nazwy użytkownika i hasła, chyba że zdecydował się usunąć plik cookie. Plik cookie jest ważny, nawet jeśli przeglądarka jest zamknięta (jeśli jest zachowana).
Kolejną ważną rzeczą do zapamiętania jest slidingExpiration parametr:
<authentication mode="Forms">
<forms loginUrl="~/Partner/LogOn" defaultUrl="~/Home/Index"
timeout="30" slidingExpiration="true" />
</authentication>
jeśli to prawda bilet uwierzytelniania zostanie odnowiony za każdym razem pojawia się aktywność na swojej stronie: odświeżenie strony itp
Co ty można zrobić - i to, co zrobiłem - jest napisać swój własny plik cookie takiego:
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
Aktualizacja
I zostały wdrożone to rutynowe bo chcesz zapisać swoje grupy w zaszyfrowanym pliku 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)
Jak widać mam ustawić wygasania cookie uwierzytelniania i autoryzacji z biletów ten sam limit czasu (tylko wtedy, gdy jest utrwalony).
Inną rzeczą, której próbowałem, to przechowywanie nazwy użytkownika i hasła w zaszyfrowanym pliku cookie. Za każdym razem, gdy ładowana jest strona wzorcowa, sprawdzam, czy funkcja My.Profile.Current.IsAuthenticated sprawdza, czy uwierzytelnianie jest nadal poprawne.Jeśli nie ja ponownie przeczytać cookie, uzyskać nazwę użytkownika i hasło, a następnie sprawdzić go na DB:
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 jest obiekt został utworzony, aby powrócić nazwę użytkownika i hasło.
CookieUserData to pamięć (zapisuję w formacie json), w której umieszczam moje hasło i grupy.
Cześć, przepraszam, wiem, że to było zbyt stare, ale po prostu ciekawy, po co przechowywać go w formacie json? hasło i grupy. Jestem bardzo nowy w firmie mvc, więc nadal staram się zrozumieć koncepcje i najlepsze praktyki w jej opracowywaniu. dzięki! – gdubs
@gdubs: Tak, wiem. To trochę niezwykłe. Mógłbym wybrać inny format, ale lubię JSON. Dodatkowo z MVC często używasz JSON, więc uznałem to za standard. – LeftyX