5

Internet explorer không giữ cookie xác thực của tôi sau một trang chuyển hướng.ASP.NET xác thực cookie biến mất, chỉ trong IE, chỉ từ các địa điểm cụ thể

Đây là tình hình:

Tôi có một ASP.NET ứng dụng web 2.0 chạy trên một IIS7 chia sẻ lưu trữ. Ứng dụng sử dụng các hình thức xác thực để xử lý đăng nhập và nhận dạng người dùng và viết một cookie (.ASPXFORMSAUTH) trên máy khách cho mục đích đó.

trong IE (được kiểm tra với phiên bản 8, 9), từ một số vị trí, cookie xác thực không được giữ sau trang đầu tiên. Các hành vi quan sát được là: tên

  1. người dùng và mật khẩu được nộp mẫu đăng nhập
  2. Người dùng succesfuly chuyển hướng đến các trang sau khi đăng nhập lần đầu tiên (và cáy cho thấy rằng cookie .ASPXFORMSAUTH tồn tại)
  3. Sau nhấp vào một liên kết khác hoặc nhấn F5 để làm mới, người dùng được xác nhận đăng nhập và cookie xác thực (theo người chơi) không tồn tại nữa. khi làm mới/nhấp chuột, cookie xác thực bị thiếu trong tiêu đề yêu cầu.

Điều này không xảy ra trong Chrome/FF và thậm chí trong IE, dường như điều này phụ thuộc vào vị trí mà tôi được kết nối.

cũng, tại địa phương (sử dụng máy chủ dev nội bộ trong VS2008), tất cả đều hoạt động tốt và phản ánh tốt trong fiddler là tốt.

Tôi đang đập đầu vào nó trong vài ngày ngay bây giờ. Nghĩ rằng nó có thể là một loại vấn đề tường lửa lạ, nhưng không thể xác định bất cứ điều gì kết luận.

Ý tưởng sẽ được đánh giá cao.

+0

Kiểm tra để đảm bảo rằng khi cookie được tạo, tên miền và đường dẫn được tạo ra có giá trị với các phần khác của ứng dụng đang cố gắng sử dụng nó. Ngoài ra, hãy đảm bảo rằng các cài đặt auth web.config của biểu mẫu của bạn là chính xác trong lĩnh vực này. Kiểm tra [trang này] [1], đặc biệt là đường dẫn và thuộc tính miền. [1]: http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx – HackedByChinese

+0

Bạn đã từng thực hiện bất kỳ tiến bộ nào về điều này chưa? Tôi đang gặp vấn đề tương tự bây giờ –

+0

Tôi không sợ. Vấn đề vẫn tồn tại. Tôi không có đủ thời gian để tham dự vào những ngày cuối cùng, sẽ trở lại với nó trong tương lai gần. Vui lòng cập nhật nếu bạn thực hiện trước. –

Trả lời

0

1.try để tạo ra một cookie persistant

2.check thiết lập cookie của bạn cho IE

+0

1. đã cố gắng và cũng đã cố gắng đặt thời gian hết hạn thành thời gian dài, không thay đổi. 2. Cài đặt IE đã được giảm xuống mức tối thiểu và cookie hoạt động tốt ở các trang web khác. Ngoài ra, cùng một trình duyệt trên cùng một máy hoạt động khác nhau tại các thời điểm khác nhau. –

9

IE bị một lỗi kì lạ - đối với một số lý do, nếu có các ký tự không tự chữ và số trong tên của tên miền , IE sẽ không tồn tại cookie ... và do đó bạn sẽ không có phiên liên tục giữa các cuộc gọi khác nhau.

Kiểm tra xem miền của bạn có ký tự không phải là chữ và số trong đó hay không, chẳng hạn như tên miền test_domain hoặc tên miền thử nghiệm hoặc lượt thích. Thật không may, tôi không biết bất kỳ bản sửa lỗi nào cho việc rút ngắn bí danh tên miền bị cáo buộc hoặc truy cập trực tiếp qua IP. Lý do bạn không gặp sự cố cục bộ là bạn đang trỏ đến http://localhost, điều đó là tốt. Ngay sau khi bạn triển khai một miền không tuân thủ IE, bạn sẽ chứng kiến ​​sự cố.

Đã xảy ra với tôi và mất hàng giờ để tìm hiểu lý do. Hi vọng điêu nay co ich. Một lý do khác để giết IE bằng lửa.

+0

Cảm ơn bạn (và xin lỗi vì phản hồi muộn). Miền của tôi chứa số, nhưng không có ký tự đặc biệt. Trong mọi trường hợp, tôi sẽ đào sâu vào vấn đề này một khi bạn đề cập đến nó. –

0

Kiểm tra ngày của máy chủ. Tôi đã có một tình huống mà máy chủ được 1 ngày phía sau trình duyệt và do đó, cookie xác thực về cơ bản đã hết hạn ngay lập tức. Điều này ảnh hưởng đến IE, nhưng không phải FF.

1

Giải pháp của tôi đã là một sự kết hợp của các giải pháp khác:

  1. IE not saving asp.net authentication token/cookies
  2. http://connect.microsoft.com/VisualStudio/feedback/details/662275/asp-net-user-agent-sniffing-and-ie10-internet-explorer-10
  3. nâng cấp lên NET 4.0 thêm thẻ ticketCompatibilityMode = "Framework40" trong web.xml: http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx

Lưu ý rằng giải pháp cuối cùng thực sự là giải pháp thứ 3.

Cuối cùng nhưng không kém phần quan: một khi tôi đặt cờ này ở trên tôi đã phải thay đổi phương pháp logout trong mã đằng sau vì cái cũ không đăng xuất nữa:

protected void LoginStatusLink_LoggedOut(object sender, EventArgs e) { 
    // remove the authenticatation cookies from the browser 
    FormsAuthentication.SignOut(); 

    // force a new 'expired' auth cookie 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName); 
    cookie.Expires = DateTime.Now.AddMonths(-1); 
    Response.Cookies.Add(cookie); 

    // delete roles cookie 
    Roles.DeleteCookie(); 

    // clear and abandon session 
    Session.Clear(); 
    Session.Abandon(); 

    // this line just to leave (forget) the current page 
    this.Response.Redirect("~/"); 
} 
Các vấn đề liên quan