Thời gian chờ tham số bạn đã tìm thấy trong /system.web/authentication/forms
là thời gian chờ (tính bằng phút) trong thời gian của vé xác thực.
Điều này có nghĩa là sau một khoảng thời gian không hoạt động nhất định, người dùng được nhắc đăng nhập lại. Nếu bạn cố gắng kiểm tra điều này My.Profile.Current.IsAuthenticated
, nó sẽ là false
.
Bạn có thể chọn không duy trì cookie. Trong trường hợp này nếu vé của bạn hết hạn, cookie của bạn cũng hết hạn. Cookie (trong trường hợp được duy trì) có mục đích ghi nhớ người dùng nếu họ quay lại trang web của bạn.
Bạn có thể muốn duy trì cookie của mình trong 10 năm để người dùng sẽ không bao giờ phải chèn tên người dùng và mật khẩu nữa, trừ khi họ đã chọn xóa cookie. Cookie có giá trị ngay cả khi trình duyệt được đóng (khi nó được duy trì).
Một điều quan trọng cần nhớ là tham số SlidingExpiration:
<authentication mode="Forms">
<forms loginUrl="~/Partner/LogOn" defaultUrl="~/Home/Index"
timeout="30" slidingExpiration="true" />
</authentication>
nếu đó là sự thật vé xác thực của bạn sẽ được gia hạn mỗi lần có hoạt động trên trang web của bạn: làm mới trang, vv
gì bạn có thể làm - và những gì tôi đã thực hiện - là để ghi cookie của riêng bạn như thế này:
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
cập nhật
Tôi đã thực hiện nguyên thói quen này, tôi muốn để lưu trữ các nhóm của tôi trong một cookie được mã hóa:
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)
Như bạn có thể thấy tôi đã thiết lập khi hết hạn của cookie xác thực và vé xác thực với cùng thời gian chờ (chỉ khi được duy trì).
Một điều khác mà tôi đã thử là lưu trữ tên người dùng và mật khẩu trong cookie được mã hóa. Mỗi lần trang chính được tải, tôi kiểm tra My.Profile.Current.IsAuthenticated để xem xác thực vẫn hợp lệ.Nếu tôi không đọc lại cookie, hãy lấy tên người dùng và mật khẩu và kiểm tra nó trên 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 là một đối tượng tôi đã tạo để trả về tên người dùng và mật khẩu.
CookieUserData là bộ nhớ (tôi lưu ở định dạng json) nơi tôi đặt mật khẩu và nhóm của mình.
hi, xin lỗi, tôi biết điều này đã quá cũ nhưng chỉ tò mò, tại sao lưu trữ nó ở định dạng json? mật khẩu và nhóm. Tôi rất mới với mvc nên im vẫn cố gắng hiểu các khái niệm và thực hành tốt nhất trong việc phát triển với nó. cảm ơn! – gdubs
@gdubs: Vâng, tôi biết. Đó là một chút khác thường. Tôi có thể đã chọn một định dạng khác nhưng tôi thích JSON. Cộng với MVC bạn có xu hướng sử dụng JSON khá nhiều nên tôi đã chấp nhận nó như một tiêu chuẩn. – LeftyX