2011-12-08 42 views
7

Tôi có bookmarklet. Nếu tôi mở một trang ngẫu nhiên (không phải của tôi) và bấm vào bookmarklet, tôi muốn kiểm tra xem người dùng đã đăng nhập trên trang của tôi chưa.Kiểm tra đăng nhập tên miền chéo?

Tôi đã thực hiện Yêu cầu AJAX Cross-Domain bằng Access-Control-Allow-Origin, nhưng có vẻ như không có ID phiên hoặc cookie gửi tại đây.

Có cách nào để thực hiện việc này không?

+0

Đừng quên thêm DELETE và PUT vào Access-Control-Allow-Method nếu bạn đang sử dụng REST –

Trả lời

4

Alex là đúng! Đây là giải pháp đầy đủ. (Nó không hoạt động với IE8 và IE9!)

Bạn cần đặt withCredentials ở phía máy khách. Kể từ jQuery 1.5.1, bạn có thể làm như hình dưới đây (Source). Đối với phiên bản cũ hơn, hãy theo dõi white rabbit.

$.ajax({ 
    url: a_cross_domain_url, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

Ở phía máy chủ, bạn phải cho phép tùy chọn cài đặt, cho phép thông tin xác thực và cho phép xuất xứ. Nguồn gốc ký tự đại diện không được phép! Nhưng bạn có thể đọc nguồn gốc từ tiêu đề yêu cầu :)

// auto adapted Access Control to origin from request header. 
$headers = apache_request_headers(); 
foreach ($headers as $header => $value) { 
    if ($header == 'Origin') 
     header('Access-Control-Allow-Origin: ' . $value, true); 
} 
// send cookies from client 
header('Access-Control-Allow-Credentials: true', true); 
// allow all methods 
header('Access-Control-Allow-Methods: GET, POST, OPTIONS', true); 
Các vấn đề liên quan