Tôi đang duyệt tài liệu của Facebook đọc về các ứng dụng canvas và tôi đã xem một ứng dụng ví dụ: http://developers.facebook.com/docs/samples/canvas. Như tôi đã đọc qua ví dụ của họ, tuy nhiên, tôi đã rất bối rối về việc họ sử dụng cookie trong ứng dụng khung nội tuyến.Facebook đặt cookie tên miền chéo cho iFrames trên trang canvas như thế nào?
Một cốt truyện chút ...
tôi đã chơi xung quanh với việc sử dụng iframe cho widget nhúng (không liên quan đến Facebook) và tôi phát hiện ra một vài trình duyệt (Chrome, Safari, vv) có chính sách nghiêm ngặt và Cookie không cho phép cookie nhiều miền được đặt trong khung nội tuyến (Firefox, mặt khác, cho phép iframe đặt cookie trong miền chéo trong iframe). Ví dụ: nếu foo.com có iframe có src="http://bar.com/widget"
tiện ích iframe sẽ không thể đặt bất kỳ cookie nào cho bar.com và do đó sẽ gặp sự cố trạng thái tồn tại trong iframe: bar.com sẽ giải thích mọi yêu cầu (bao gồm yêu cầu ajax) từ tiện ích dưới dạng yêu cầu mới mà không có phiên được thiết lập. Tôi gặp khó khăn, và tìm thấy một cách xung quanh điều này bằng cách sử dụng JSONP và javascript để đặt cookie cho foo.com thay thế ...
... và như vậy?
Vâng, tôi đang xem ứng dụng Facebook khung nội tuyến canvas và tôi nhận thấy rằng ứng dụng của họ (được lưu trữ trên runwithfriends.appspot.com) có thể đặt cookie, u
, với id người dùng hiện tại cùng với một số khác tham số cho miền runwithfriends.appspot.com. Nó sẽ gửi cookie này với mọi yêu cầu ... và nó hoạt động trong cả Chrome và Firefox! WTF? Facebook làm cách nào để tránh các hạn chế cookie đa miền trên Chrome?
(Tôi đã biết câu trả lời bây giờ, nhưng tôi nghĩ rằng điều này có thể hữu ích cho bất cứ ai đang gặp khó khăn để tìm ra điều tương tự -. Tôi sẽ gửi câu trả lời dưới đây)
Cập nhật: phiên bản mới nhất của một số trình duyệt (Safari v6.x + trên OS X, Safari trên iOS 6+, và tôi giả định Chrome và FF sớm) không cho phép đặt cookie nhiều miền nữa, ngay cả khi yêu cầu post-to-iframe. –