6

Tôi đang cố gắng tìm ra lý do tại sao Chrome (26.0.1410.64) và IE10 dường như không nhận ra cookie mà tôi đã đặt trong phản hồi từ bộ điều khiển ASP.NET Web API. Dưới đây là tình huống:Cookie phản hồi không được thiết lập bởi Chrome & IE

Tôi có biểu mẫu đăng nhập trình đơn thả xuống trên trang của tôi thực hiện cuộc gọi ajax đến phương thức API Web của tôi (qua HTTP POST) và phương thức Web API trả về một số dữ liệu JSON và cũng đặt cookie trong phản hồi (sử dụng tiêu đề HTTP). Nó hoạt động hoàn hảo trong Firefox và Safari (như vậy, WebKit) nhưng không hoạt động trong Chrome hoặc IE. Chrome và IE dường như hoàn toàn bỏ qua cookie được gửi lại trong phản hồi. Tôi đã xác minh (sử dụng Fiddler) rằng cookie được gửi trở lại trên phản hồi vì vậy tôi biết nó ở đó - Tôi không thể tìm ra lý do tại sao IE10 và Chrome không nhặt nó lên mặc dù.

Bất kỳ ý tưởng nào? Liệu nó có liên quan đến cách Chrome và IE10 xử lý các cookie phản hồi trong các yêu cầu ajax không?

Trả lời

17

Vì vậy, tôi đã tìm ra vấn đề, mặc dù nó không phải là điều tôi thực sự muốn chấp nhận như một giải pháp. Tôi đoán tôi sẽ phải đối phó với nó và luôn kiểm tra trang web trên máy cục bộ của tôi bằng Firefox.

Vì vậy, đây là vấn đề:

Khi tôi chạy trang web của tôi tại địa phương bằng cách chạy nó từ Visual Studio và IIS trên máy tính cục bộ của tôi, nó tạo ra một trang web tại địa chỉ như http://localhost:1839/. Vì lý do nào đó, cookie ajax bị IE10 và Chrome bỏ qua khi đó là "localhost" - nhưng không phải khi đó là tên máy chủ hoặc Địa chỉ IP thực. Vì vậy, nếu tôi chỉnh sửa tệp lưu trữ của mình và tạo một mục nhập chung chung như localhost.com và trỏ nó ở 127.0.0.1:1839 thì mọi thứ hoạt động tốt trong IE và Chrome (và Firefox vẫn hoạt động tốt).

Đó là khi tôi sử dụng địa chỉ localhost:1839 rằng cookie ajax chỉ hoạt động trong Firefox. Vì vậy, những gì tôi đã kết thúc là triển khai trang web của tôi đến một máy chủ IIS thử nghiệm khác nhau (trên một máy khác) mà tôi có một mục test.mydomain.com trong tệp lưu trữ cục bộ của tôi - trỏ đến IP của máy chủ IIS thử nghiệm. địa chỉ nhà. Giờ đây, IE, Chrome và Firefox đều chấp nhận cookie ajax từ miền "test.mydomain.com" giả mạo này.

Vì vậy, đối với những người bạn gửi cookie trở lại theo yêu cầu ajax - hãy cẩn thận với vấn đề "localhost" này với Chrome và IE.

+1

Tôi gặp sự cố tương tự với Chrome v40. Điều này thực sự gây phiền nhiễu. Xem tại đây: http://i.imgur.com/q7lkXBz.gif – Gaui

+1

Vâng, có vẻ như Firefox là trình duyệt duy nhất chấp nhận và lưu trữ cookie cục bộ, đó là lý do tại sao tôi sử dụng nó để phát triển mọi thứ liên quan đến yêu cầu và cookie ajax. – jamauss

+0

Tôi đã quản lý [giải quyết vấn đề này] (http://stackoverflow.com/questions/28583729/localhost-cookies-not-set/28594724) bằng XMLHttpRequests – Gaui

2

Tên miền trên cookie đặt có nhiều khả năng xung đột với việc sử dụng máy chủ cục bộ. Nếu bạn chỉnh sửa file host của bạn và thêm một bí danh nó sẽ làm cho điểm test.mydomain.com để máy tính cục bộ của bạn:

  • Trong c: \ windows \ system32 \ drivers \ etc \ hosts thêm như sau:
    • 127.0.0.1 test.mydomain.com
  • Bắt đầu máy chủ web bên trong Visual Studio
  • Đóng tất cả các trình duyệt, sau đó tải test.mydomain.com
+0

Bí quyết này rất đáng hiểu và thực hiện cho tất cả các trang web của bạn chạy trên một máy chủ cục bộ Môi trường Windows. Nó sẽ giúp bạn tiết kiệm rất nhiều đau đầu. – fergal303

1

Điều này đã khiến tôi cảm thấy khó chịu trong một giờ cho đến khi tôi tìm thấy câu trả lời SO này. Tôi đã thử nghiệm một máy chủ dựa trên Tornado triển khai thực hiện xác thực đăng bài của Auth0. Máy chủ đã sử dụng HTTPRequest.set_secure_cookie() đã bị Chrome bỏ qua. Sử dụng Firefox đã tránh vấn đề này, cũng như thử nghiệm từ Chrome trên một máy tính để bàn khác.

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