首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP Session 傳遞方式詳解:URL 參數、表單隱藏域、文件存儲三種模式

     編輯:PHP 綜合知識

Session ID 傳遞機制

HTTP 無狀態,Session 依賴 Session ID 識別用戶。PHP 支持三種傳遞方式:

方式一:URL 參數 (GET/POST)

<?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);

URL傳遞效果

常量 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_cookies1啟用 Cookie 傳遞 (默認)
session.use_only_cookies1強制只用 Cookie,禁用 URL (推薦生產)
session.use_trans_sid0禁用自動 URL 追加 SID (推薦生產)
session.save_handlerfiles文件存儲 (默認)
session.save_path/tmp存儲目錄 (需寫入權限)

安全建議

  1. 生產環境關閉 URL 傳遞 (use_only_cookies=1, use_trans_sid=0) 防 Session Fixation
  2. HTTPS 強制傳輸 Cookie
  3. session.cookie_httponly=1 防 XSS 竊取
  4. session.cookie_secure=1 僅 HTTPS 發送
  5. 定期 session_regenerate_id(true) 更新 ID

總結

理解三種傳遞方式有助於調試與兼容舊系統,但現代 Web 應默認使用 Cookie + 文件存儲,並按安全建議加固配置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved