2010-11-22 30 views
8

domain.com numaralı bir sayfam var, bu da bir JSONP ajax isteğini (jQuery'nin .getJSON() işlevini kullanarak) anotherdomain.com adresindeki bir URL'ye gönderir. anotherdomain.com'daki kaynağın o etki alanında ayarlanmış herhangi bir tanımlama bilgisine sunucu tarafı erişimi olacağını (okundu: kabul ettim) düşündüm, ancak durum böyle görünmüyor mu?JSONP üzerinden Çerez Erişimi

ajax çağrısı belirli bir cookie'ye erişmek, bazı veri manipülasyonları yapmak ve cookie değeri tarafından girilen zengin bir bilgi kümesine dönmek için özel olarak yapılmaktadır. Orijinal alanın çerez değerine doğrudan erişimi yoktur, bu yüzden bir ajax isteğinin ihtiyacım olan durumu koruyacağını düşündüm.

Çerezler hakkında hangi önemli bilgilere bakıyorsunuz? Yorgunum ve göremiyorum.

Teşekkürler.

GÜNCELLEME

Bunu yapmanın bir yolunu buldu, ancak bu benim göz JSONP benzer, bu nedenle Ajax versiyonu değil iken bu şekilde çalışır neden merak ediyorum. İstek, tarayıcı oturumundan kesildi mi, böylece hiçbir çerez erişilemez mi? tüm ajax istekleri

<script type="application/x-javascript" src="<?php echo $service_url . '&callback=interests' ?>"></script> 
<script type="text/javascript"> 
    function interests(data) { 
    $(function() { 
     var c_behaviors = data.length; 
     var ids   = []; 

     for(var i = 0; i < c_behaviors; i++) { 
     ids.push(data[i].behavior_id); 
     } 

     $('body').append('<p><label>Returned:</label> ' + ids.join(', ') + '</p>');  
    }); 
    } 
</script> 
+1

Bunu üçe katlamış olabileceğinize eminim, ancak tanımlama bilgisinin başka bir etki alanı.com tarafından ayarlandığından ne kadar eminsiniz? Üstelik, son kullanma tarihi, yol vb. Gibi çerezin durumu nedir? –

+0

Evet. Ajax çağrısından önce hedef URL'yi uyarırsam ve ardından hedef URL'yi yeni bir sekmede yüklerseniz, tam olarak ne elde etmeyi beklediğimi alırım. Ajax çağrısının, tarayıcı oturumundan düşündüğümden daha fazla bağlantısı kesilmiş gibi görünüyor. –

+0

$ .ajax aramasını "json" yazarak deneyin ve ne tür sonuçlar aldığınızı görün. BTW, JSONP yaklaşımınız http://stackoverflow.com/questions/1421245/make-getjson-in-jquery-to-pass-cookies-to-external-domain adresinde belgelendi ve başka biri için de çalışıyordu –

cevap

9

The same origin policy applies, alan ajax çağrısında erişilen halinde, tarayıcı (document.host) yüklenen etki farklıdır, istenen url etki alanıyla ilişkili tüm çerezleri olmaz gönderilmek Bu nedenle, JSONP yaklaşımı, pencerede yeni bir komut dosyası etiketi yazdığı için çalışır; bu, bir tarayıcının bir dış etki alanına yapabileceği herhangi bir kaynak isteği gibi davranacaktır (bu nedenle, URL'deki etki alanıyla ilişkili tüm tanımlama bilgilerinin iletilmesi). Bunu, tarayıcıda stackoverflow.com (tarayıcımdaki çerezleri barındıran tek diğer alan, cevabını yazarken buldum) iken, chrome konsolumdan $.post("http://atdmt.com")'u arayarak bunu doğruladım ve herhangi bir çerez göndermedim. istek başlıkları.

Başka bir çözüm için devleti inşa sorunu aşmanın anotherdomain.com sahip olacaktır anotherdomain.com birinci parti cookie (çerez alanı niteliğini ayarlamaksızın) ayarlayabilir ve ne zaman bir ajax/json isteği anotherdomain.com adresinden yapılır. javascript aracılığıyla bu çerezlere erişebilir ve standart HTTP paramları kullanarak isteği itin.

Yardım ettim.

1

Daha önce aynı sorunla karşılaştım. Bulduğum sorun, çoğu tarayıcı, aynı kaynak politikası karşılanmadığında bir oturumu (yani oturum çerezi oluşturmanızı) KABUL ETMEMEKTEDİR.