2010-06-01 6 views
6

Đây là một trong số đó là ném cho tôi một vòng lặp. Tôi đang cố gắng thiết lập một cookie đơn giản có một cặp name: value trên IE8. Thử nghiệm trên FF và nó hoạt động tốt. IE8 ngăn chặn nó.IE8 chặn cookie JavaScript

Tôi đã đọc về những thứ P3P và tạo ra một doc P3P cơ bản, không có lỗi được báo cáo bởi công cụ của IBM, và bổ sung sau đây trên tất cả các trang:

<meta http-equiv="P3P" CP="CAO DSP COR PSDa CONi TELi OUR STP COM NAV"><link rel="P3Pv1" href="/w3c/p3p.xml"></link> 

Mã này tôi sử dụng để thiết lập các cookie là như sau:

function setCompatibilityCookie(c_name, value, expiredays) { 
var exdate = new Date(); 
exdate.setDate(exdate.getDate() + expiredays); 
document.cookie= c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toUTCString());} 

Bất kỳ ý tưởng nào tại sao IE8 không chặn tôi đặt cookie này?

Cảm ơn bạn, Schalk

+1

Bạn có đặt cookie từ tài liệu "bên thứ ba" (tức là trong IFRAME) không? –

+0

Không, nó chỉ là một trang HTML. Tôi đã thực sự tách mã thành một trang HTML đơn giản có hai liên kết, một liên kết đặt cookie và một liên kết khác nhận giá trị cookie và in nó vào trang. Điều này hoạt động hoàn hảo trong Firefox nhưng trong IE8 cũng như Chrome, cookie không bao giờ được đặt. – schalkneethling

+0

Bây giờ đã thử nghiệm nó trên IE6 chạy trong một máy ảo và nó đang bị chặn ở đó là tốt, vì vậy đây là một số điều IE freaky. Dù sao, bạn có thể xem mã mới nhất mà tôi đang sử dụng ở đây: http://pastebin.com/yB8WSDjW – schalkneethling

Trả lời

1

Một vấn đề có thể là bạn đang sử dụng getDate(), mà trả về ngày tháng. Nếu expiredays của bạn quá lớn, nó sẽ chuyển sang tháng sau, nhưng trong IE, có thể bạn sẽ ở trong tháng này và sẽ hết hạn ngay lập tức. Có thể thử điều này:

function setCompatibilityCookie(c_name, value, expiredays) { 
var exdate = new Date(); 
exdate.setTime(exdate.getTime() + (expiredays * 86400000)); 
document.cookie= c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toUTCString());} 
+0

Xin chào, cảm ơn vì đề nghị này, tôi đã thử nó nhưng vấn đề vẫn còn tồn tại. Xin vui lòng xem bình luận của tôi về câu hỏi của Philippe ở trên. – schalkneethling

+0

Ok, lý do tại sao chrome 'chặn' cookie của tôi là do vấn đề này http://code.google.com/p/chromium/issues/detail?id=535, bạn có thể đọc thêm về cách giải quyết vấn đề này ở đây: http://stackoverflow.com/questions/335244/why-does-chrome-ignore-local-jquery-cookies: Bây giờ nó chỉ là IE8, thật bất ngờ;) – schalkneethling

+0

Vì vậy, trang của bạn đã được tải ra khỏi tệp cục bộ hệ thống và không tắt máy chủ từ xa? Tôi nghĩ rằng đây là vấn đề trình duyệt IE của bạn. Tôi biết tôi đã gặp phải điều này trước đây, nhiều năm và nhiều năm trước. Về cơ bản, bất cứ khi nào bạn tải một tệp ra khỏi một tài nguyên cục bộ (ổ cứng của bạn hoặc một chia sẻ cục bộ), trình duyệt hoạt động hoàn toàn khác nhau. Trong IE bạn sử dụng để có thể thực hiện gần như bất cứ điều gì bạn muốn tại địa phương (HTAs là tuyệt vời). Sau đó, mô hình bảo mật thay đổi và bữa tiệc kết thúc. Bạn đang phát triển một ứng dụng có nghĩa là chạy cục bộ hay bạn chỉ sử dụng ổ đĩa cục bộ để phát triển và thử nghiệm? – Andrew

1

Tôi đã sử dụng cùng một mã cho độ tuổi để đặt cookie ở phía máy khách mà không gặp vấn đề gì. Tôi chắc chắn sẽ điều tra về thiết lập IE thay vì mã của chính nó. Trong IE, bạn có một loạt các khả năng để nói nếu bạn chấp nhận cookie hoặc không phụ thuộc vào nguồn (như bạn phát hiện ra nó). Tôi chắc chắn sẽ bắt đầu ở đây! Chúc may mắn

2

Tôi đã gặp vấn đề tương tự và dành rất nhiều thời gian để tìm hiểu lý do tại sao IE không lưu cookie JS của tôi. Công cụ P3P của tôi là OK và IE đã lưu cookie phản hồi, chứ không phải JS.

Đột nhiên và đáng ngạc nhiên nhất mà tôi tìm thấy giải pháp bằng cách loại bỏ các dòng sau từ html:

< meta http-equiv = "Content-Type" content = "text/html; charset = utf-8" />

Tôi không biết tại sao điều đó xảy ra nhưng giải quyết được tất cả các vấn đề của tôi. Hy vọng điều này sẽ giúp một ai đó.

+0

Mặc dù bây giờ tôi tin rằng vấn đề đặc biệt là do phần "charset = utf-8". – EvilDuck

0

Tôi đã trải nghiệm điều này và đã thử một số câu trả lời ở đây, bản phát hành của tôi đã hết hạn. Tôi đã thiết lập nó cho 99999999999, nhưng khi tôi giảm xuống xuống 9999999 nó hoạt động. Có vẻ như IE8 có giới hạn về thời hạn (thiên tài Microsoft, thiên tài thuần túy: s)

0

Tôi đã đối mặt với cùng một tình huống và vấn đề là ... expiredays là một từ khóa CHỈ dành cho IE. Nếu bạn thay đổi tên của expiredays biến trong whateveryouwant, nó hoạt động tốt trên tất cả các trình duyệt.

0

Tôi cũng đã gặp phải sự cố này và hóa ra nó phải liên quan đến độ dài của tên cookie. Trong trường hợp này tôi đã có một tên cookie 26 ký tự và điều này hoạt động tốt trong bất cứ điều gì nhưng IE 8 và dưới đây. Tôi rút ngắn tên để chỉ có 10 ký tự và tất cả của một IE 8 đột ngột được đọc/ghi cookie chỉ tốt. Tôi giả định giới hạn tùy ý ở đây là 16 ký tự cho tên cookie của IE 8.