AJAX yanıtı bir çerez ayarlayabilir mi? Değilse, alternatif çözümüm nedir? Javascript veya benzeri bir şeyle mi ayarlamalıyım?
AJAX yanıtı bir çerez ayarlayabilir mi? Değilse, alternatif çözümüm nedir? Javascript veya benzeri bir şeyle mi ayarlamalıyım?
Yanıtlar:
Evet , sunucu normal bir istek için yaptığınız gibi sunucu tarafı kodundaki AJAX isteğinde de çerez ayarlayabilirsiniz, çünkü sunucu normal bir istek veya AJAX isteği arasında ayrım yapamaz.
AJAX istekleri sadece sunucuya istekte bulunmanın özel bir yoludur, sunucunun herhangi bir HTTP isteğinde olduğu gibi yanıt vermesi gerekir. İsteğin cevabında çerez ekleyebilirsiniz.
If the user agent supports HTTP State Management it should persist, discard and send cookies (as received in the Set-Cookie response header, and sent in the Cookie header) as applicable.
- w3.org/TR/XMLHttpRequest adresinden
XMLHttpRequest için w3 spesifikasyonu bölüm 4.6.3'e göre, bir kullanıcı aracısı Set-Cookie başlığına uymalıdır. Yani cevap, evet, yapabilmeniz gerekir.
tırnak:
Kullanıcı aracısı HTTP Durum Yönetimi'ni destekliyorsa, geçerli olarak çerezleri (Set-Cookie yanıt başlığında alınan ve Çerez başlığında gönderilen şekilde) atmalı ve göndermelidir.
Kayıt için, yalnızca AJAX çağrısı aynı etki alanında yapıldığında yukarıdakilerin hepsinin (hala) doğru olduğu tavsiye edilir. AJAX kullanarak başka bir alandaki çerezleri ayarlamayı düşünüyorsanız, tamamen farklı bir solucan kutusu açıyorsunuz . Bununla birlikte, etki alanları arası çerezleri okumak işe yarar (veya en azından sunucu onlara hizmet eder; müşterinizin UA'sının kodunuzun bunlara erişmesine izin verip vermediği, yine farklı bir konudur; 2014 itibariyle).
withCredentials=true
için xhr
nesnenin (2) Set Access-Control-Allow-Credentials
hem SEÇENEKLER uçuş öncesi isteği yanısıra gerçek istek (3) gerektiği gibi ayarlayın çerezinde
Ayrıca, sunucunuzun http olmayan bir istekte güvenli çerezler ayarlamadığını kontrol edin. Sadece benim ajax isteği "güvenli" seti ile bir php oturumu alıyordu öğrendim. Https'de olmadığım için oturum çerezini geri göndermiyordum ve oturumum her ajax isteğinde sıfırlanıyordu.