2014-06-11 26 views
9

jQuery'nin ajax çağrısını farklı bir etki alanına kullanarak basit bir dosya yükleme formu oluşturdum. Tarayıcının alan adı için bir çerezi vardır ve bu çerez Firefox'ta istek ile birlikte gönderilir. Bununla birlikte, Chrome'da çerez bulunmuyor ve bu da giriş yapmama ile sonuçlanıyor. Çerezin Chrome'da mevcut olduğunu doğruladım, yalnızca istekle birlikte gönderilmiyor.CORS çerezi Chrome'da gönderilmiyor

ajax çağrısı: Bunlardan bazıları gerekli olmayabilir. İlgili çözümler denemeye eklendi ve bu girişimleri göstermek için kaldı.

<head> 
    <script src="jquery-2.1.1.min.js"></script> 
</head> 

<form enctype="multipart/form-data" id="file" method="POST"> 
    <input name="file" type="file" /> 
    <input name="Submit" type="button" id="upload"/> 
</form> 

<script type="text/javascript"> 
    $.support.cors = true 

    $('input#upload').click(function(){ 
     var formData = new FormData($('form#file')[0]); 

     .ajax({ 
      url: 'http://accounts.mysite.dev/file/saveasset', 
      type: 'POST', 
      data: formData, 
      cache: false, 
      contentType: false, 
      processData: false, 
      xhrFields: { 
       withCredentials: true 
      }, 
      crossDomain: true 
     }); 
    }); 
</script> 

Firefox kullanıcının çerezi gibi, doğru başlıklarını gönderir

POST /file/saveasset HTTP/1.1 
Host: accounts.mysite.dev 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0 
Accept: */* 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
DNT: 1 
Referer: http://phptest/htmltest/fileUpload.html 
Content-Length: 8032 
Content-Type: multipart/form-data; boundary=---------------------------4450073521062221055385143281 
Origin: http://phptest 
Cookie: Accounts=somecookiestuff 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 

Ama Krom does not

Ben sunucu kurulumu bu orijinini ve kimlik bilgilerini sağlamak için doğru olduğuna inanıyoruz
POST /file/saveasset HTTP/1.1 
Host: accounts.mysite.dev 
Content-Length: 7981 
Accept: */* 
Origin: http://phptest 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryGyMYxvKgEKWfBR5x 
Referer: http://phptest/htmltest/fileUpload.html 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

Ancak Chrome’un isteğinde bile gönderilmiyorlar. durumda alakalı, benim sunucu (Zend w/php) Ben sunucudaki herhangi SEÇENEĞİ uçuş öncesi isteği görmüyorum

$this->_response->setHeader('Access-Control-Allow-Origin', 'http://phptest'); 
$this->_response->setHeader('Access-Control-Allow-Credentials', 'true'); 

ayarlar.

Neden Chrome çerezimi gönderiyor?

Menü → Ayarlar → Göster Gelişmiş Ayarlar ... → Gizlilik: İçerik Ayarları

emin "Blok üçüncü taraf çerezlerini ve site verilerini" Make olan Krom 3. parti çerezleri engelleyecek şekilde ayarlanmış olup olmadığını

+0

Chrome'da FF'de ayarlanmış hangi çerezleri görmeyi bekliyorsunuz? Her iki istek de bir “Origin” başlığına sahiptir. – Palpatim

+0

Çerez başlığı. –

cevap

13

Kontrol kontrolsüz. Ya da 3. taraf çerezlerini engelleyen başka bir şeyiniz varsa bunu da devre dışı bırakın.

Aynı sorun, siteler arası JSONP istekleri de yapsaydı, çerezler, alan adlarındaki tüm etiket isteklerinde birlikte gönderilmez.

+0

Fantastik! Ben _think_ Bu varsayılan ayardır, bu yüzden bir noktada değiştirmiş olmalıyım. –

+0

Ayarları değiştirmenin yanı sıra bunu yapmanın başka bir yolu var mı? –

+0

Bu, bizim devlerimizden birini biraz doldurup bize biraz zaman ayırıyor. Bunun için teşekkürler. – radicalmatt

İlgili konular