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

PHP 3 Session 實作驗證範例:test_session.php3 完整流程

     編輯:PHP 綜合知識

本文提供配合前兩篇(session.inc.php3、cookie.inc.php3)的完整測試腳本,展示 Session 寫入、讀取與驗證的端到端流程。雖然程式碼屬歷史產物,但其邏輯結構清晰呈現了 Session 生命週期管理的核心步驟。

測試腳本流程解析

1. 引入函數庫與初始化

<?php require("session.inc.php3"); require("cookie.inc.php3"); ?>
<?php
session_checkid(20);  // 20 分鐘後過期
mysql_connect('localhost','user','pass') or Die("can't connect to db!");
?>
  • session_checkid(20):檢查 Cookie 中是否有 sess_sid,無則產生新 ID 並透過 JavaScript 寫入 Cookie(有效期 20 分鐘)。
  • 建立 MySQL 連接,供 Session 函數庫讀寫資料表。

2. 顯示邏輯:$show 參數控制

<?php
if ($show) {
    if (session_read()) {
        $username = $session[username];
        $userpass = $session[userpass];
        echo "<P>session[username]:$username session[userpass]:$userpass";
    }
} else {
    $session[username] = "yourid";
    $session[userpass] = "12345";
    if (!session_write()) { print $sess_error; }
    else {
        echo "<p>session[username]被設置成:$session[username]";
        echo "<a href='$PATH_INFO?show=1'>測試一下SESSION的作用</a>";
    }
}
?>

流程說明

  1. 首次造訪(無 $show):建立測試資料寫入 $session 陣列,呼叫 session_write() 序列化存入資料庫,並顯示測試連結(帶 show=1)。
  2. 點擊測試連結(帶 show=1):呼叫 session_read() 從資料庫依 sess_sid 讀取並還原 $session 陣列,顯示內容驗證 Session 持久化成功。

關鍵技術細節回顧

環節原始實作現代對應
Session ID 產生 uniqid('SC') PHP 內建 session_create_id()(PHP 7.1+)或自動管理
Cookie 寫入 JavaScript document.cookie setcookie() + session_set_cookie_params()
資料序列化 自訂 Split_Array() + eval() serialize()/unserialize() 或 JSON
資料儲存 MySQL blob 欄位 Redis/Memcached/資料庫(透過 SessionHandlerInterface)
過期清理 需自行排程 PHP 原生 session.gc_* 設定

安全性隱憂提醒

  • eval() 注入:str2arr() 使用 eval() 解析資料庫內容,若資料庫被竄改將導致 RCE。
  • Session ID 暴露:URL 中出現 $PATH_INFO?show=1,若未強制 HTTPS,Session ID 可能經由 Referer 洩漏。
  • 無 CSRF 保護:表單提交無 Token 驗證。
  • 密碼明文儲存:測試資料 userpass=12345 明文寫入 Session,生產環境嚴禁。

教學價值總結

此範例完整示範了「Client Cookie → Server Session ID → Database Storage → Data Serialization → Retrieval」的閉環流程,是理解 Session 機制本質的優良教材。現代開發者只需實作 SessionHandlerInterface 即可替換儲存後端,核心流程邏輯保持一致。

實驗建議:若在現代 PHP(7.0+)環境測試此舊碼,需啟用 register_globals(強烈不建議)或手動將 $HTTP_GET_VARS/$HTTP_POST_VARS 映射至全域變數,並修正 mysql_* 為 mysqli_* 或 PDO。純粹理解流程建議閱讀原始碼邏輯而非實際執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved