有兩種方式用來(lái)傳送會(huì)話 ID:
會(huì)話模塊支持這兩種方式。 Cookie 方式相對(duì)好一些,但是用戶可能在瀏覽器中關(guān)閉 Cookie,所以 第二種方案就是把會(huì)話 ID 直接并入到 URL 中,以保證會(huì)話 ID 的傳送。
無(wú)需開(kāi)發(fā)人員干預(yù),PHP 就可以自動(dòng)處理 URL 傳送會(huì)話 ID 的場(chǎng)景。
如果啟用了 session.use_trans_sid
選項(xiàng),
PHP 將會(huì)自動(dòng)在相對(duì) URI 中包含會(huì)話 ID。
注意:
arg_separator.output php.ini 配置指令允許你自定義會(huì)話 ID 參數(shù)分隔符。 可以設(shè)定為 & 來(lái)保持和 XHTML 的一致性。
會(huì)話開(kāi)始之后,可以使用 SID
常量。
如果客戶端未提供會(huì)話 cookie,該常量的展開(kāi)形式為 session_name=session_id
,
反之,該常量為空字符串。因此,可以直接在 URL 中包含此常量的展開(kāi)字符串而無(wú)需考慮會(huì)話 ID 的實(shí)際傳送方式。
下例演示了如何在會(huì)話中注冊(cè)變量以及如何使用 SID
常量正確的鏈接到另一頁(yè)面。
示例 #1 某單一用戶的點(diǎn)擊數(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() 來(lái)打印 SID
常量的展開(kāi)字符串以避免 XSS 相關(guān)的攻擊。
如果使用
--enable-trans-sid 參數(shù)編譯的 PHP,
上例中打印 SID
常量部分就可以省略。
注意:
非相對(duì) URL 將被視為指向外部站點(diǎn)的鏈接, 從安全角度考慮,外站的鏈接 URL 中將 不包含
SID
常量,以避免將SID
泄露到外部服務(wù)器的風(fēng)險(xiǎn)。