有兩種方式用來傳送會話 ID:
會話模塊支持這兩種方式。 Cookie 方式相對好一些,但是用戶可能在瀏覽器中關閉 Cookie,所以 第二種方案就是把會話 ID 直接并入到 URL 中,以保證會話 ID 的傳送。
無需開發(fā)人員干預,PHP 就可以自動處理 URL 傳送會話 ID 的場景。
如果啟用了 session.use_trans_sid
選項,
PHP 將會自動在相對 URI 中包含會話 ID。
注意:
arg_separator.output php.ini 配置指令允許你自定義會話 ID 參數(shù)分隔符。 可以設定為 & 來保持和 XHTML 的一致性。
會話開始之后,可以使用 SID
常量。
如果客戶端未提供會話 cookie,該常量的展開形式為 session_name=session_id
,
反之,該常量為空字符串。因此,可以直接在 URL 中包含此常量的展開字符串而無需考慮會話 ID 的實際傳送方式。
下例演示了如何在會話中注冊變量以及如何使用 SID
常量正確的鏈接到另一頁面。
示例 #1 某單一用戶的點擊數(shù)
<?php
session_start();
if (empty($_SESSION['count'])) {
$_SESSION['count'] = 1;
} else {
$_SESSION['count']++;
}
?>
<p>
Hello visitor, you have seen this page <?php echo $_SESSION['count']; ?> times.
</p>
<p>
To continue, <a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">click
here</a>.
</p>
可以使用 htmlspecialchars() 來打印 SID
常量的展開字符串以避免 XSS 相關的攻擊。
如果使用
--enable-trans-sid 參數(shù)編譯的 PHP,
上例中打印 SID
常量部分就可以省略。
注意:
非相對 URL 將被視為指向外部站點的鏈接, 從安全角度考慮,外站的鏈接 URL 中將 不包含
SID
常量,以避免將SID
泄露到外部服務器的風險。