PHP - Oturumlar

Bir web sitesinin çeşitli sayfalarında verileri erişilebilir hale getirmenin alternatif bir yolu, bir PHP Oturumu kullanmaktır.

Bir oturum, sunucuda kayıtlı oturum değişkenlerinin ve değerlerinin depolandığı geçici bir dizinde bir dosya oluşturur. Bu veriler, ziyaret sırasında sitedeki tüm sayfalarda mevcut olacaktır.

Geçici dosyanın konumu, dosyadaki bir ayarla belirlenir. php.ini dosya çağrıldı session.save_path. Herhangi bir oturum değişkenini kullanmadan önce bu yolu ayarladığınızdan emin olun.

Bir seans başladığında aşağıdaki olayları takip edin -

  • PHP ilk olarak o belirli oturum için, 3c7foj34c3jj973hjkop2fc937e3443 gibi 32 onaltılık sayıdan oluşan rastgele bir diziden oluşan benzersiz bir tanımlayıcı oluşturur.

  • Adlı bir çerez PHPSESSID benzersiz oturum tanımlama dizesini saklamak için kullanıcının bilgisayarına otomatik olarak gönderilir.

  • Bir dosya, sunucuda belirlenen geçici dizinde otomatik olarak oluşturulur ve benzersiz tanımlayıcının adını sess_ yani sess_3c7foj34c3jj973hjkop2fc937e3443 ile önek olarak taşır.

Bir PHP betiği, bir oturum değişkeninden değeri almak istediğinde, PHP otomatik olarak benzersiz oturum tanımlayıcı dizesini PHPSESSID çerezinden alır ve ardından bu adı taşıyan dosya için geçici dizininde arar ve her iki değeri karşılaştırarak bir doğrulama yapılabilir.

Oturum, kullanıcı tarayıcıyı kaybettiğinde veya siteden ayrıldıktan sonra sona erer, sunucu, genellikle 30 dakika olmak üzere önceden belirlenen bir sürenin ardından oturumu sonlandırır.

PHP Oturumu Başlatma

Bir PHP oturumu, bir çağrı yapılarak kolayca başlatılır. session_start()Bu işlev önce bir oturumun başlamış olup olmadığını kontrol eder ve hiçbiri başlatılmamışsa başlatır. Çağrı yapmanız tavsiye edilirsession_start() sayfanın başında.

Oturum değişkenleri çağrılan ilişkilendirilebilir dizide saklanır $_SESSION[]. Bu değişkenlere bir oturumun ömrü boyunca erişilebilir.

Aşağıdaki örnek bir oturum başlatır ve ardından adlı bir değişkeni kaydeder. counter bu, oturum sırasında sayfa her ziyaret edildiğinde artar.

Faydalanmak isset() oturum değişkeninin önceden ayarlanıp ayarlanmadığını kontrol etmek için işlev.

Bu kodu bir test.php dosyasına koyun ve sonucu görmek için bu dosyayı birçok kez yükleyin -

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1; }else { $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ". $_SESSION['counter'];
   $msg .= "in this session."; ?> <html> <head> <title>Setting up a PHP session</title> </head> <body> <?php echo ( $msg ); ?>
   </body>
   
</html>

Aşağıdaki sonucu üretecektir -

You have visited this page 1in this session.

Bir PHP Oturumunu Yok Etme

Bir PHP oturumu şu şekilde yok edilebilir: session_destroy()işlevi. Bu fonksiyon herhangi bir argümana ihtiyaç duymaz ve tek bir çağrı tüm oturum değişkenlerini yok edebilir. Tek bir oturum değişkenini yok etmek istiyorsanız, o zaman kullanabilirsinizunset() bir oturum değişkenini kaldırmak için işlev.

İşte tek bir değişkeni geri alma örneği -

<?php
   unset($_SESSION['counter']);
?>

İşte tüm oturum değişkenlerini yok edecek çağrı -

<?php
   session_destroy();
?>

Otomatik Oturumu Açma

Ayarlayabiliyorsanız, bir kullanıcı sitenizi ziyaret ettiğinde bir oturum başlatmak için start_session () işlevini çağırmanıza gerek yoktur. session.auto_start değişken 1 inç php.ini dosya.

Çerezsiz oturumlar

Bir kullanıcının makinelerinde çerez depolamasına izin vermediği bir durum olabilir. Yani tarayıcıya oturum kimliği göndermenin başka bir yöntemi var.

Alternatif olarak, oturum başladığında tanımlanan sabit SID'yi de kullanabilirsiniz. İstemci uygun bir oturum tanımlama bilgisi göndermediyse, session_name = session_id formuna sahiptir. Aksi takdirde, boş bir dizeye genişler. Böylece, bunu koşulsuz olarak URL'lere yerleştirebilirsiniz.

Aşağıdaki örnek, bir değişkenin nasıl kaydedileceğini ve SID kullanılarak başka bir sayfaya nasıl doğru şekilde bağlanılacağını gösterir.

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1; }else { $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ". $_SESSION['counter'];
   $msg .= "in this session."; echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

Aşağıdaki sonucu üretecektir -

You have visited this page 1in this session.
To continue click following link

htmlspecialchars() XSS ile ilgili saldırıları önlemek için SID yazdırılırken kullanılabilir.