Oturum Kimliğinin Aktarımı

Bir oturum kimliğini yaymanın iki yolu vardır:

  • Çerezler
  • URL bağımsız değişkeni

Oturum modülü her ikisini de destekler. Çerezler en uygunudur, fakat her zaman kullanmak mümkün olmadığından ikinci bir yöntem sağlıyoruz. İkinci yöntem, oturum kimliğini doğrudan URL'nin içine gömer.

PHP bağlantıları şeffaf olarak dönüştürme yeteneğine sahiptir. Çalışma anında session.use_trans_sid yönergesi etkin kılınmışsa, göreli URI'ler otomatik olarak oturum kimliğini içerecek şekilde değiştirilir.

Bilginize:

arg_separator.output php.ini yönergesi bağımsız değişken ayracının değiştirilebilmesini sağlar. Tam XHTML uyumluluğu için yönergeye değer olarak & belirtin.

Ayrıca, oturum başlatıldığında tanımlanan SID sabitini de kullanabilirsiniz. Eğer istemci uygun bir oturum çerezi göndermezse, SID sabiti oturum_ismi=oturum_kimliği değerini içerecektir. Aksi takdirde sabitin değeri bir boş dizge olur. Bu durumda, oturum kimliğini koşulsuz olarak URL'lerin içine gömebilirsiniz.

Aşağıdaki örnekte bir değişkenin nasıl oturum değişkeni haline getirildiği ve SID sabitiyle başka bir sayfaya nasıl bağlantı kurulduğu gösterilmiştir.

Örnek 1 - Tek bir kullanıcının sayfa erişimlerinin sayılması

<?php

session_start
();

if (empty(
$_SESSION['count'])) {
$_SESSION['count'] = 1;
} else {
$_SESSION['count']++;
}
?>

<p>
Merhaba sayın ziyaretçi, bu sayfayı <?php echo $_SESSION['count']; ?>
kere ziyaret ettiniz.
</p>

<p>
Devam etmek için, <a href="nextpage.php?<?php echo htmlspecialchars(SID);
?>">buraya tıklayınız</a>.
</p>

XSS saldırılarından kaçınmak için URL'ye SID yerleştirilirken htmlspecialchars() kullanılabilir.

SID sabitini URL'ye yukarıdaki gibi yerleştirecekseniz, PHP'yi --enable-trans-sid seçeneğiyle derlemeniz gerekmez.

Bilginize:

Göreli olmayan URL'lerin harici siteleri işaret ettikleri varsayılır ve oturum kimliğinin başka bir sunucuya ifşa edilme riskine karşı SID bunlara yerleştirilmez.

add a note add a note

User Contributed Notes 2 notes

up
33
Anonymous
14 years ago
The first time a page is accessed, PHP doesn't yet know if the browser is accepting cookies or not, so after session_start() is called, SID will be non-empty, and the PHPSESSID gets inserted in all link URLs on that page that are properly using SID.

This has the consequence that if, for example, a search engine bot hits your home page first, all links that it sees on your home page will have the ugly PHPSESSID=... in them.

This appears to be the default behavior. A work-around is to turn on session.use_only_cookies, but then you lose session data for anyone who has their cookies turned off.
up
2
EastWhite at foxmail dot com
8 years ago
The constant SID would always be '' (an empty string) if directive session.use_trans_sid in php ini file is set to 0.
But set session.use_trans_sid to 1 is not effective if director session.use_only_cookies is 1.
try:
session_start(['use_only_cookies'=>0])
or
session_start(['use_only_cookies'=>0,use_trans_sid=1])
To Top