2011-12-29 32 views
5

Tôi có một trang mà người dùng đăng nhập vào một ứng dụng back-end thông qua một dịch vụ web. Dịch vụ web trả về ID phiên mà tôi muốn lưu trữ trong cookie trong 40 phút, sau 40 phút, ứng dụng back-end sẽ tự động đóng phiên.C# Cookie - Hết hạn tài sản sẽ không được thiết lập

Mã của tôi để viết cookie:

private void SetCookie() 
{ 
    Response.Cookies.Add(new HttpCookie("Cookie_SessionID")); 
    Response.Cookies["Cookie_SessionID"].Value = ni.NicheSessionID; 
    Response.Cookies["Cookie_SessionID"].Expires = DateTime.Now.AddMinutes(40); 

    //.... after a few more things 
    Response.Redirect(returnUrl); 
} 

Sau đó, trên trang tiếp nhận tôi có điều này:

private HttpCookie GetCookie() 
{ 
    HttpCookie cookie = Request.Cookies["Cookie_SessionID"]; 
    if (cookie != null && cookie.Value != null) 
    {    
     return cookie; 
    } 
    return null;   
} 

Đối với một số lý do cookie được trả về bởi GetCookie() luôn có một giá trị Expires của 0001-01-01 00:00:00, mặc dù khi tôi xem cookie trong trình duyệt, nó có thời gian hết hạn chính xác.

Sau khi đọc this trong đó nêu cookie hết hạn chỉ đơn giản là không được gửi đến máy chủ, tôi giả sử những gì có thể xảy ra là cookie đang được viết đúng nhưng trình duyệt không phải là gửi thời hạn sử dụng vì nó thực sự không cần thiết ? ...

Vấn đề của tôi là tôi muốn nắm bắt chính xác điều đó - cookie đã hết hạn và vì vậy họ phải đăng nhập lại - nhưng tôi cần hiển thị thông báo dọc theo dòng "Tôi biết bạn có đã đăng nhập nhưng bạn sẽ cần phải làm điều đó một lần nữa "loại điều.

Cảm ơn

Trả lời

10

Trình duyệt sẽ không gửi bất kỳ thứ gì tới máy chủ ngoại trừ tên và giá trị cookie. Không thể truy xuất tất cả các thuộc tính khác (hết hạn, tên miền, đường dẫn, httponly, ...) trên các yêu cầu sau khi cookie đã được đặt.

Nếu bạn muốn hiển thị thông báo như vậy thì bạn sẽ cần một số cơ chế phát hiện khác mà người dùng đã đăng nhập. Bạn có thể đặt cookie hiện diện trong một năm hoặc lâu hơn và kiểm tra xem nó có tồn tại hay không.

Cách được chấp nhận nhiều hơn là chuyển hướng người dùng đến trang đăng nhập khi họ cố gắng truy cập tài nguyên được bảo vệ và hiển thị một số thông báo dọc theo dòng "Bạn cần đăng nhập để xem trang này. đã đăng nhập trước đó, phiên của bạn có thể đã hết hạn. "

(Cũng lưu ý rằng bạn nên đặt lại cookie theo mọi yêu cầu, để người dùng sẽ không bị đăng xuất nếu họ tiếp tục sử dụng trang web. Không rõ mã của bạn cho dù bạn đang làm việc này hay không .)

3

Giao thức HTTP không gửi ngày hết hạn cookie đến máy chủ.

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