AJAX istekleri PHP Session bilgi korumak mı?

6 Cevap php

Ben bir kullanıcı kendi kimliği $_SESSION saklanan olan siteme oturum açmış ve onun tarayıcı o sunucuya bir AJAX isteği kılacak bir 'Kaydet' butonuna tıklandığında olsaydı. Onun $_SESSION ve çerezleri bu isteği muhafaza edilecektir, ve güvenle id $_SESSION mevcut olan güvenebilirsiniz?

6 Cevap

Cevap evet:

Oturumlar sunucu tarafı tutulur. Bildiğim kadarıyla sunucu söz konusu olduğunda, bir AJAX isteği ve düzenli bir sayfa isteği arasında hiçbir fark yoktur. Her ikisi de HTTP istekleri vardır ve her ikisi de aynı şekilde başlığında çerez bilgileri içerir.

Istemci tarafında, aynı tanımlama her zaman düzenli bir isteği veya bir AJAX isteği olsun sunucusuna gönderilir. Düzenli istekleri ile yaptığı gibi Javascript kodu, özel ya da bu oluyor farkında olmak için bir şey yapmanıza gerek yok, sadece aynı çalışır.

Ne gerçekten alıyoruz olan: kurabiye AJAX isteği ile gönderilir? AJAX isteği aynı etki (ya da çerez alanı kısıtlamaları içinde) olduğunu varsayarsak, cevabı evet. Yani AJAX istekleri geri aynı sunucuya aynı oturum bilgisi (oturum bilgileri başka herhangi bir PHP komut dosyası isteyen erişimi) başı olarak (komut adı verilen bir session_start sorunu varsayarak) muhafaza yok.

PHP dosyası AJAX istekleri varsa bir session_start() Oturum bilgileri muhafaza edilecektir. (Istekleri barikat aynı etki alanı içinde olan)

Well, not always. çerezleri kullanarak, iyi. Ama "can I safely rely on the id being present" (Bu sayfanın ziyaretçi sayısı oldukça yüksek görünüyor çoğunlukla referans için) önemli bir nokta ile tartışma uzatmak için beni çağırdı.

PHP yerine kurabiye, URL yeniden yazma ile oturumları korumak için yapılandırılabilir. (How it's good or bad (<- örneğin orada üstteki açıklama bakın) olan bir separate question, şimdi sadece bir yan not ile, geçerli bir sopa bakalım: URL ile en önemli sorunu -temelli oturumları - çıplak oturum kimliği bariz görünürlüğü - iç Ajax ile ilgili bir sorun çağrıları değildir; Bu Ajax için açık eğer ama sonra, bu ) ... bu yüzden orada da, sitenin geri kalanı için açık oluyor

Onların istek URL'lerin doğru hazırlanmış In case of URL-rewriting (cookieless) sessions, Ajax calls must take care of it themselves söyledi. (Ya da kendi özel çözüm dönebilirsiniz. Hatta daha zorlu durumlarda, oturumları on the client side korumak için çare olabilir.) Nokta kullanarak değilse explicit care, oturum sürekliliği için gerekli olan çerezler:

  1. Ajax (PHP alınan gibi) HTML kelimesi kelimesine sadece extract URL'ler ararsa zaten (Ümmü cookified) pişer gibi, bu, Tamam olmalıdır.

  2. Onlar assemble isteği kendilerini Uris gerekiyorsa, oturum kimliği elle URL eklenmesi gerekir. (here edin, ya da PHP tarafından oluşturulan sayfa kaynakları (with URL-rewriting on) bunu nasıl görmek için.)


Dan OWASP.org:

Effectively, the web application can use both mechanisms, cookies or URL parameters, or even switch from one to the other (automatic URL rewriting) if certain conditions are met (for example, the existence of web clients without cookies support or when cookies are not accepted due to user privacy concerns).

Bir Ruby-forum yazılan Gönderen:

When using php with cookies, the session ID will automatically be sent in the request headers even for Ajax XMLHttpRequests. If you use or allow URL-based php sessions, you'll have to add the session id to every Ajax request url.

Ama dikkat etmek bir şey, size bir çerçeve özellikle kullanıyorsanız, uygulama istekleri arasında oturum kimlikleri yenileyici olup olmadığını kontrol etmektir -, sorunlar çalışacağını oturum kimliği açıkça bağlıdır şey olsa açıkça verilerin geri kalanı içinde oturum etkilenmemiş olacak.

Uygulama böyle oturum kimlikleri yenileyici ise o zaman yürürlükte bir ajax isteği / talep sayfasında session id yerine geçersiz bir durum ile sona erebilir.

Bu çerçeveler ne var, örneğin Cephe Denetleyicisi veya boostrap komut oturumu başlatmak varsa, o da initalization sayfa kontrolörleri veya ajax kontrolörler için var umurumda olmaz. PHP çerçeveler her derde deva değildir, ancak bu gibi pek çok yararlı şeyler yapmak!