2012-04-27 25 views
18

Tôi đang cố gắng xoay tròn mục đích của thuộc tính isPersistent được tìm thấy trên lớp FormsAuthenticationTicket. http://msdn.microsoft.com/en-us/library/kybcs83h.aspxMục đích của FormsAuthenticationTicket là tài sản không phù hợp?

  1. Có trường hợp nào khi cài đặt có hoạt động không?
  2. Trong trường hợp nào tôi muốn đặt isPersistent thành true và false?

Thuộc tính dường như không cần thiết vì tôi đã tìm thấy cách duy nhất để duy trì cookie xác thực người dùng của mình trong các phiên trình duyệt là đặt thuộc tính Expires của cookie được tạo sau khi tạo vé; ngay cả khi vé có giá trịPersistent được đặt thành false.

Tôi cũng nhận thấy rằng việc đặt vé hết hạn (không phải cookie) thành 10 giây với isPersistent được đặt thành true có rất ít ảnh hưởng; vé hết hạn sau 10 giây.

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
    identity.Name, 
    DateTime.Now, 
    DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes), 
    isPersistent, 
    JsonSerializerService.ToJson(identity), 
    FormsAuthentication.FormsCookiePath); 

string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 

cookie.Path = FormsAuthentication.FormsCookiePath; 

cookie.Expires = DateTime.Now.AddYears(1); // good for one year 

Tôi đánh giá cao mà tôi có thể thay đổi mã trên tôi để tùy chọn thiết lập expires

if (isPersistent) 
    cookie.Expires = DateTime.Now.AddYears(1); // good for one year 

Một ứng dụng ví dụ đã được tạo @ GitHub. https://github.com/chrismoutray/AuthSample Điều này về cơ bản cho thấy rằng ngay cả bằng cách thiết lập cờ isPersistent cho đúng ủy quyền trình duyệt chéo không hoạt động.

Trả lời

9

Trong khung 1.0/1.1, thiết lập IsPersistent thành true sẽ đặt hết hạn 50 năm cho cookie.
Trong phiên bản 2.0, nó đã bị thay đổi, do đó, hết hạn của cookie khớp với thuộc tính thời gian chờ xác thực biểu mẫu. Vì vậy, bạn có thể đặt IsPersistent thành true nhưng cookie sẽ luôn hết hạn sau khoảng thời gian chờ xác thực biểu mẫu.
Mã của bạn thực hiện thủ thuật nếu bạn muốn thời gian hết hạn dài mà không sửa đổi thời gian chờ xác thực biểu mẫu.

chỉnh sửa: Tôi đã tải mẫu của bạn và thay thế đang cookie của bạn với

FormsAuthentication.SetAuthCookie(model.UserName, true); 

Và nó làm việc như mong đợi: với hai ngày cấu hình như thời gian chờ mẫu của bạn, cookie của tôi sẽ hết hạn trong hai ngày.

+0

Tôi cảm thấy như tôi đang thiếu thứ gì đó, cookie sẽ không tồn tại trừ khi tôi đặt cụ thể trường cookie 'Hết hạn'. Đặt IsPersistent không có hiệu lực. –

+0

Nếu bạn đặt IsPersistent thành đúng cookie được tạo sẽ có ngày hết hạn hiện tại + biểu mẫu hết giờ. Nó không phải là trường hợp của bạn? – lnu

+0

Vâng không - nếu tôi xóa dòng 'cookie.Expires = DateTime.Now.AddYears (1);' tính năng nhớ-tôi của thông tin đăng nhập không hoạt động mặc dù isPersistent được đặt thành true. –

Các vấn đề liên quan