2010-06-23 47 views
10

Các bước chính xác cần thiết để cookie tồn tại sau khi đóng trình duyệt là gì? Hiện tại tôi có:Cookie xác thực/phiên xóa sau khi trình duyệt đóng

  1. createPersistentCookie đặt thành true trên LoggedIn sự kiện.
  2. MachineKey được chỉ định.
  3. Hình thức hết hạn trượt được đặt thành true.

Miễn là trình duyệt mở, người dùng sẽ vẫn đăng nhập nhưng ngay sau khi đóng, và người dùng sẽ cần phải đăng nhập lại trong bao lâu. Tôi đang thiếu gì?

EDIT: Tôi đã đi qua bài viết được chỉ ra bởi marapet (xem bình luận bên dưới) và nó khiến tôi quan tâm đến việc vé có thực sự có cờ IsPersistent không. Vé được giải mã trông giống như sau: System.Web.Security.FormsAuthentication.Decrypt(Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName].Value) {System.Web.Security.FormsAuthenticationTicket} CookiePath: "/" Expiration: {19/08/2010 17:27:14} Expired: false IsPersistent: true IssueDate: {19/07/2010 17:27:14} Name: "alex" UserData: "" Version: 2 Tất cả chi tiết đều chính xác và tương ứng với những thông tin tôi đã đặt trong sự kiện LoggedIn. Hơn cả giá trị cookie tôi có thể lấy trực tiếp từ cookie, giống với cái này. Tuy nhiên, ngay khi tôi đóng trình duyệt, cookie bị mất.

Tuy nhiên, điều tôi nhận thấy là cookie mang theo vé có ngày đặt lại vì lý do nào đó. Thứ nhất, tôi không thể ghi đè lên các thiết lập trong web.config, do đó, vào cuối sự kiện LoggedIn nó hết hạn tài sản là 4000 phút sau ngày phát hành, không phải là một tháng mà tôi đang thiết lập theo lập trình. Sau đó, sau khi tải trang cookie tôi truy xuất bằng FormsAuthentication.FormsCookieName đã hết hạn thuộc tính 01/01/0001. Tôi nghĩ có lẽ đây là nơi mà vấn đề nằm? Bất kỳ suy nghĩ sẽ được đánh giá cao.

EDIT # 2: Tôi đang thay đổi cả tiêu đề và các thẻ để bao gồm phiên, vì nó hóa ra là có liên quan cho vấn đề/giải pháp

Trả lời

10

Vì vậy, tôi đã tìm ra giải pháp, cuối cùng. Khi nó quay ra, nó không phải là vấn đề với cookie xác thực như vậy (nó đã được giữ lại một cách chính xác, hoặc đúng hơn là nếu trình xử lý không gỡ bỏ nó, đã quyết định không chính xác rằng người dùng không đăng nhập dựa trên phiên bị thiếu). Vấn đề là cookie phiên bị mất hoặc không được xác định chính xác. Vì vậy, việc sửa chữa là tự thêm một cookie phiên trong log trên như sau:

HttpCookie authCookie = new HttpCookie("ASP.NET_SessionId", Session.SessionID); 
authCookie.Domain = ".mydomain.com"; 
authCookie.Expires = DateTime.Now.AddMonths(1); 
Response.Cookies.Add(authCookie); 

Bây giờ khi các trình duyệt sẽ mở ra một lần nữa phiên được xác định đúng và phiên người dùng khôi phục lại.

+2

Điều này cũng giải quyết được vấn đề của tôi. Nếu bạn rời khỏi miền, trình duyệt của khách hàng sẽ đặt tên miền đó thành miền hiện tại. – jhappoldt

0

Cookie hình thức xác thực dai dẳng không nên bị loại bỏ khi trình duyệt đóng cửa. Nó vẫn hợp lệ cho giá trị thời gian chờ được xác định trong web.config.

Tuy nhiên, một số trình duyệt có thể được định cấu hình để hủy tất cả cookie vào cuối phiên - bạn có thể kiểm tra cài đặt trình duyệt của mình (FireFox: Tools - options - privacy).

+0

Nó không phải là một điều cụ thể của trình duyệt, nó sẽ xảy ra trong tất cả các trình duyệt. Nó có lẽ nhiều hơn để làm với thiết lập tôi phải có bỏ qua một nơi nào đó. Thời gian chờ cũng không liên quan, vì các cookie không có ở đó nếu tôi đóng và mở trình duyệt trong khoảng 10 giây. – Shagglez

+0

Khi sự kiện LoggedIn kích hoạt, cookie đã được tạo. Ngoài ra, hãy chắc chắn rằng bạn chỉ định một giá trị thời gian chờ trong web.config. Tôi thường tự tạo cookie xác thực. Có một bài viết sử dụng Sự kiện LoggingIn để ngăn việc tạo cookie tự động: http: //blogs.msdn.com/b/swathis/archive/2009/04/03/mẫu-xác thực-vấn đề-ghi nhớ-me-do-not-work-user-profile-vai trò-được-không-lưu.aspx – marapet

+0

Cảm ơn nhận xét, tôi đã đi qua bài viết và đã làm một số điều tra. Trong trường hợp của tôi, vé xác thực có thuộc tính IsPersistent được đặt thành true trên tất cả các trang (và tôi đã thay đổi thủ công hết hạn trong tương lai), vì vậy nó không giống như nó không được thiết lập đúng cách. Ngay sau khi tôi đóng trình duyệt, nó đã biến mất. – Shagglez

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