HTTP 無狀態,Session 依賴 Session ID 識別用戶。PHP 支持三種傳遞方式:
<?php $sid = "test"; session_id($sid); // 固定 Session ID 便於測試 session_start(); $_SESSION['user'] = "Session傳遞方式測試"; ?> <a href="session_3.php?sid=<?php echo session_id(); ?>">帶SID跳轉</a> // php.ini 設置: // session.use_only_cookies = 0 // 允許 URL 傳遞 // session.use_trans_sid = 1 // 自動在鏈接/表單追加 SID // session_3.php 接收 session_id($_GET['sid']); session_start(); var_dump($_SESSION);

常量 SID 可直接輸出 session_name=session_id 字符串:<a href="page.php?<?php echo SID; ?>">
<form action="" method="post"> 姓名:<input type="text" name="uname"> <input type="hidden" name="sid" value="<?php echo session_id(); ?>"> <input type="submit" value="確定"> </form> // 接收頁 $sid = $_POST['sid']; session_id($sid); session_start(); var_dump($_SESSION);
PHP 默認將 Session 數據序列化存儲在服務器文件系統 (session.save_path),瀏覽器僅持有 Cookie PHPSESSID。無需手動傳遞,最常用、最安全。
| php.ini 指令 | 值 | 效果 |
|---|---|---|
| session.use_cookies | 1 | 啟用 Cookie 傳遞 (默認) |
| session.use_only_cookies | 1 | 強制只用 Cookie,禁用 URL (推薦生產) |
| session.use_trans_sid | 0 | 禁用自動 URL 追加 SID (推薦生產) |
| session.save_handler | files | 文件存儲 (默認) |
| session.save_path | /tmp | 存儲目錄 (需寫入權限) |
use_only_cookies=1, use_trans_sid=0) 防 Session Fixationsession.cookie_httponly=1 防 XSS 竊取session.cookie_secure=1 僅 HTTPS 發送session_regenerate_id(true) 更新 ID理解三種傳遞方式有助於調試與兼容舊系統,但現代 Web 應默認使用 Cookie + 文件存儲,並按安全建議加固配置。