2010-09-20 38 views
13

Trong một ứng dụng ASP.NET MVC2, chúng tôi có action login tiêu chuẩn ...Kiểm soát hết FormsAuthentication createPersistentCookie

if (ValidateUser(model.Email, model.Password) 
{ 
    FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe); 
    ... 

nơi tham số thứ hai để SetAuthCookie là createPersistentCookie với các tài liệu sau đây:

createPersistentCookie 
    Type: System.Boolean 
    true to create a persistent cookie 
    (one that is saved across browser sessions); otherwise, false. 

Chúng tôi muốn có cookie liên tục hết hạn sau 2 tuần (nghĩa là người dùng có thể quay lại trang web trong vòng 2 tuần và không bắt buộc phải xác thực lại. Sau thời gian đó họ sẽ được yêu cầu đăng nhập lại).

Làm cách nào để đặt hết hạn cho cookie liên tục?

Trả lời

33

Bạn không thể làm điều này?

<system.web> 
    <authentication mode="Forms"> 
      <forms timeout="20160"/> 
    </authentication> 
</system.web> 

Thời gian chờ tính bằng phút.

Giá trị thời gian chờ này không phụ thuộc vào việc bạn có đang tạo cookie liên tục hay không. Nó chỉ đơn giản nói rằng nếu bạn không dứt khoát chấm dứt cookie (FormsAuthentication.SignOut), nó sẽ tự động hết hạn sau một khoảng thời gian nhất định.

Nói cách khác, nếu bạn làm:

FormsAuthentication.SetAuthCookie(someMembershipName, false); 

Sẽ cho kết quả trong cookie hết hạn khi:

  • Người dùng đóng trình duyệt, hoặc
  • Thời gian chờ là đạt.

Trái ngược với nếu bạn làm:

FormsAuthentication.SetAuthCookie(someMembershipName, true); 

Sẽ cho kết quả trong cookie chỉ hết hạn khi thời gian chờ là đạt.

HTH

EDIT:

Đưa những từ MSDN:

các timeout thuộc tính được mô tả như sau:

Xác định thời điểm đó, chỉ trong vài phút số nguyên , sau đó cookie hết hạn. Nếu thuộc tính SlidingExpiration là đúng, thuộc tính timeout là giá trị trượt, hết hạn tại số phút được chỉ định sau khi nhận được yêu cầu cuối cùng . Để ngăn chặn hiệu suất bị xâm phạm và để tránh nhiều cảnh báo trình duyệt cho người dùng đã bật cảnh báo cookie, cookie được cập nhật khi hơn một nửa số thời gian đã chỉ định đã trôi qua. Điều này có thể gây mất chính xác. Mặc định là "30" (30 phút).

Lưu ý Dưới ASP.NET V1.1 liên tục cookie không hết thời gian, bất kể cài đặt thuộc tính thời gian chờ. Tuy nhiên, như của ASP.NET V2.0, cookie liên tục làm thời gian ra theo thuộc tính thời gian chờ.

Nói cách khác, cài đặt hết hạn này chỉ xử lý cookie Xác thực biểu mẫu.

Cookie xác thực biểu mẫu là cookie phía máy khách, không có gì liên quan đến phiên phía máy chủ khác mà bạn có thể có (ví dụ: Giỏ hàng).

Đó phiên hết hạn với các thiết lập sau:

<sessionstate 
     mode="inproc" 
     cookieless="false" 
     timeout="20" 
+0

sự hiểu biết của tôi là thời gian chờ này điều khiển phiên hết hạn. Thời gian chờ của phiên của chúng tôi là theo thứ tự 2 giờ. Nó không phải là chúng tôi muốn phiên họp kéo dài trong hai tuần, mà là "nhớ tôi" cookie để kéo dài trong thời gian đó. – Rob

+0

Cảm ơn bạn đã theo dõi. Tôi sẽ làm một số thử nghiệm với Firebug và hết hạn phiên và báo cáo lại. Trong thời gian chờ đợi, +1 và tôi đã chấp nhận câu trả lời của bạn. Cảm ơn một lần nữa. – Rob

+0

@Rob: đừng lo lắng, hãy cho tôi biết nếu bạn tìm thấy bất kỳ probs (như chúng tôi sử dụng các thiết lập trên và dường như làm việc tốt trong mọi tình huống) – RPM1984

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