PHP oturumları nasıl çalışır? ("nasıl kullanılırlar?" değil)


127

Oturum dosyaları genellikle örneğin /tmp/sunucuda saklanır ve adlandırılır sess_{session_id}. İçeriğe bakıyorum ve gerçekten nasıl çalıştıklarını çözemiyorum.

Değişken adını ve içeriğini dosyadan almak kolaydır. Fakat PHP hangi oturumun kime ait olduğunu nasıl biliyor?

Session_id tamamen rastgele görünür ve bir IP adresi birden fazla kullanıcıya sahip olabilir ve her kullanıcının birden fazla açık tarayıcı penceresi varsa birkaç oturumu olabilir.

Peki nasıl çalışıyor?


Yanıtlar:


203

Genel durumda:

  • oturum kimliği, oturumu oluşturulduğunda kullanıcıya gönderilir.
  • bir çerezde saklanır (varsayılan olarak denir PHPSESSID)
  • bu çerez tarayıcı tarafından her istekle birlikte sunucuya gönderilir
  • sunucu (PHP), hangi dosyanın o kullanıcıya karşılık geldiğini bilmek için, session_id'yi içeren bu tanımlama bilgisini kullanır.

Oturum dosyalarındaki veriler $_SESSION, serileştirilmiş içeriğidir (yani, dizgeleştirme gibi bir işlevle dizge olarak temsil edilir ) ; ve $_SESSIONdiziyi doldurmak için dosya PHP tarafından yüklendiğinde serileştirilmemiştir .


Bazen, oturum kimliği bir çerezde saklanmaz, URL'lerde de gönderilir - ancak günümüzde bu oldukça nadirdir.


Daha fazla bilgi için, kılavuzun bazı yararlı bilgiler veren Oturum Yönetimi bölümüne bakabilirsiniz .

Örneğin , oturum kimliğinin sayfadan sayfaya, çerez kullanılarak veya URL'lerde nasıl aktarıldığını ve hangi yapılandırma seçeneklerinin bunu etkilediğini açıklayan Oturum Kimliğini Geçirme hakkında bir sayfa var .


5
Bir mobil cihaz (yerel bir uygulamadan) oturumları normal olarak nasıl işler? Bir oturum kimliği mi kaydediliyor? Yoksa OAuth ortaya çıktı mı?
Adam Waite

14

PHP Oturumu Nasıl Çalışır?

  • İlk olarak PHP, a86b10aeb5cd56434f8691799b1d9360tek bir oturum için 16 bayt uzunluğunda benzersiz bir tanımlayıcı numarası (örneğin 32 onaltılık karakterden oluşan bir dizge olarak saklanır ) oluşturur.

  • PHPSESSID tanımlama bilgisi, bu numarayı kaydetmek için bu benzersiz kimlik numarasını kullanıcıların tarayıcısına iletir.

  • Sunucuda, sess_ öneki (örn sess_a86b10aeb5cd56434f8691799b1d9360.) İle aynı benzersiz kimlik numarası ile yeni bir dosya oluşturulur .

  • Tarayıcı, bu çerezi her istekle birlikte sunucuya gönderir.

  • PHP, bu benzersiz kimlik numarasını PHPSESSID tanımlama bilgisinden (her istekte) alırsa, PHP geçici dizinde arama yapar ve bu numarayı dosya adıyla karşılaştırır. Her ikisi de aynıysa, mevcut oturumu geri alır, aksi takdirde o kullanıcı için yeni bir oturum oluşturur.

Kullanıcı tarayıcıyı kapattığında veya siteden ayrıldığında bir oturum yok edilir. Sunucu ayrıca önceden belirlenen oturum süresi sona erdikten sonra oturumu sonlandırır. Bunlar, PHP'nin oturumu işlemek için kullandığı basit mekanizma adımlarıdır. Umarım bu makale PHP SESSION'ın nasıl çalıştığını anlamanıza yardımcı olur.

Daha fazla ayrıntı için bu makaleye bakın. PHP Oturumu Nasıl Çalışır?


Ancak, örneğin, belirli bir siteye (diğer bir deyişle: bir oturumda) giriş yaptıysam ve yeni bir sekme açarsam mysite.com/cart. "Merhaba Joe Doe, 5 mesaj, işte alışveriş sepeti listeniz ..." yani oturum bilgilerimi de alacağım. - Ama bu boş sekmeyle ilgili tarayıcı neden GET-İsteğiyle birlikte herhangi bir Oturum Kimliği gönderiyor? hızlı güncelleme: Ah, cevabı buldum: +)
Frank Nocke

Oturum kimliğinin güvenliği nasıl sağlayabileceğini sorabilir miyim? Örneğin, kullanıcı oturum açmışsa ve profiline ulaşırsa, farklı kullanıcının profiline erişmek için url parametresini değiştirmek yerine oturum kimliği bunu nasıl önleyebilir?
Andrewboy

4

Oturum kimliği gerçekten rastgeledir ve yapılandırmaya bağlı olarak bir çerezde veya URL'de iletilir. Bu PHPSESSID = xxxx'i bazı URL'lerde zaten görmüş olabilirsiniz, bu isimde bir çerez de var.


2

PHP'de oturumlar, session_start () işlevi kullanılarak başlatılır. Setcookie () işlevi gibi, session_start () işlevi sayfadaki boş satırlar dahil olmak üzere herhangi bir HTML'den önce gelmelidir. Şöyle görünecektir: <?php session_start( );?><html><head> ....... vb. Session_start () işlevi rastgele bir Oturum Kimliği oluşturur ve bunu kullanıcının bilgisayarındaki bir çerezde saklar (bu aslında istemci tarafında saklanan tek oturum bilgisidir. ) Tanımlama bilgisinin varsayılan adı PHPSESSID'dir, ancak bu, sunucudaki PHP yapılandırma dosyalarında değiştirilebilir (ancak çoğu barındırma şirketi onu yalnız bırakacaktır.) PHP kodunuzdaki oturum kimliğine başvurmak için, bu nedenle, değişken $ PHPSESSID (bu bir çerez adı; bunu Çerezlerden hatırlıyor musunuz?)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.