2012-09-04 32 views
6

Trang web nơi tôi làm việc được tạo thành từ một số dự án (được viết bằng một số ngôn ngữ). Ngay bây giờ chúng ta phải sử dụng một số mã vụng về trong chuỗi truy vấn và biến phiên để giữ cho một người đăng nhập khi họ đi từ dự án đến dự án. Vì cookie là tên miền cụ thể, chúng tôi đang cố gắng chuyển đổi chúng vì chúng có thể được đặt trong một dự án bằng một ngôn ngữ nhưng được truy cập bởi một dự án khác (trên cùng một tên miền) bằng ngôn ngữ khác.Cookie hoạt động như thế nào trong ASP.NET?

Tuy nhiên, tôi đang gặp sự cố khi thay đổi giá trị của cookie và xóa chúng. Hoặc cụ thể hơn, tôi gặp sự cố khi có bất kỳ thay đổi nào tôi thực hiện đối với thanh cookie.

Ví dụ trong mã logout tôi:

if (Request.Cookies["thisuserlogin"] != null) 
{ 
    HttpCookie myCookie = new HttpCookie("thisuserlogin"); 
    myCookie.Value = String.Empty; 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    Response.Cookies.Add(myCookie); 
    Response.Cookies.Set(myCookie); 
    litTest.Text = myCookie.Expires.ToString() + "<br />" + Request.Cookies["thisuserlogin"].Expires.ToString(); 
} 

tôi gió lên với một dòng là ngày hôm qua và dòng tiếp theo là 1/1/0001 12:00:00 mặc dù họ NÊN được cùng một cookie. Vậy tại sao mặc dù cookie được đặt, giá trị của nó không thay đổi? Có cách nào để buộc máy tính của người dùng cập nhật giá trị của cookie, kể cả xóa không?

Cảm ơn bạn rất nhiều. PS Bất kỳ URL nào bạn có thể cung cấp để cung cấp cho một mồi dễ hiểu cho cookie sẽ được đánh giá cao.

+2

Tôi chỉnh sửa các tiêu đề vì cookie không C# cụ thể. ASP.NET là thích hợp hơn. – usr

Trả lời

0

Bạn nên sử dụng công cụ như Fiddler ở phía máy khách để nắm bắt tất cả dữ liệu đi qua lại. Điều này sẽ giúp bạn thấy rằng cookie của bạn nên được đặt với một ngày trong quá khứ (và cũng thiếu từ yêu cầu tiếp theo).

Đối với kết quả hộp văn bản, bạn đang liệt kê cookie bạn đã tạo hết hạn và thời gian hết hạn của yêu cầu cookie, không có cookie. Thay vào đó, nếu bạn nhìn vào cookie phản hồi, bạn sẽ thấy ngày được đặt. Ngoài ra, cuộc gọi đến Response.Cookies.Set là không cần thiết. Response.Cookies.Add phải là tất cả những gì bạn cần.

+0

Fiddler là một công cụ tuyệt vời cho kho vũ khí – NickSuperb

+0

Tôi không hiểu. Bởi vì tôi đang sử dụng lệnh Thêm, không nên hai cookie trong đầu ra là cùng một cookie cả với ngày hết hạn cụ thể? Và nếu lệnh Set là không cần thiết, tại sao nó lại ở đó? – Alverant

+0

Đặt ở đó để duy trì khả năng tương thích khi di chuyển mã từ ASP sang ASP.Net (thực sự VB.Net), giống như [Response.End] (http://msdn.microsoft.com/en-us/library/system.web .httpresponse.end.aspx) (không chính xác, xem bình luận tiếp theo). Về lý do tại sao họ không thay đổi, hãy nhìn nó theo cách này. Bạn có một cookie trong Cookie yêu cầu của bạn (đến từ máy khách). Bạn tạo một cookie hoàn toàn mới có cùng tên và đặt nó trong cookie Response (sẽ được chuyển đến máy khách). Tại thời điểm này, mặc dù chúng có cùng tên, chúng là hai cookie hoàn toàn khác nhau và trỏ đến các đối tượng khác nhau. – Joshua

1

http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx

if (Request.Cookies["thisuserlogin"] != null) 
{ 
    HttpCookie byeCookie = new HttpCookie("thisuserlogin"); 
    byeCookie.Expires = DateTime.Now.AddDays(-1); 
    Response.Cookies.Add(byeCookie); 

    // Update Client 
    Response.Redirect(Request.RawUrl); 
} 
+0

Tôi không thể xóa tất cả cookie trên miền. Tôi cần xóa các cookie cụ thể và để chúng bị xóa, như đã lưu ý trong ví dụ của tôi, không xảy ra. – Alverant

+0

Đơn giản hơn nhiều. – NickSuperb

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