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

PHP Session 變數操作完整指南:啟動、儲存、讀取、刪除與銷毀

     編輯:PHP 綜合知識

Session 變數是 PHP 跨頁面保持用戶狀態的核心工具。本文系統整理 Session 完整生命週期操作,包含啟動、寫入、讀取、計數器範例、刪除單一變數與銷毀整個 Session,並說明常見陷阱。

1. 啟動 Session

必須在任何 HTML 輸出前 呼叫 session_start(),否則會觸發 "headers already sent" 警告。

<?php session_start(); ?>
<html><body>...</body></html>

2. 儲存與讀取 Session 變數

使用超全域陣列 $_SESSION(PHP 4.1.0+),勿使用已棄用的 session_register()。

<?php
session_start();
// 寫入
$_SESSION['views'] = 1;
// 讀取
echo "Pageviews = " . $_SESSION['views'];
?>

3. 頁面計數器實作(含 isset 判斷)

<?php
session_start();
if (isset($_SESSION['views'])) {
    $_SESSION['views']++;
} else {
    $_SESSION['views'] = 1;
}
echo "Views = " . $_SESSION['views'];
?>

4. 刪除 Session 資料

操作函式/語法效果
刪除單一變數unset($_SESSION['views'])移除指定鍵值,其他資料保留
清空所有變數$_SESSION = []; (PHP 5.4+) 或 session_unset()保留 Session ID,資料歸零
徹底銷毀 Sessionsession_destroy()刪除伺服器端儲存檔案與 Session ID Cookie,不會 立即清除 $_SESSION 變數

5. 完整登出範例

<?php
session_start();
// 1. 清空陣列
$_SESSION = [];
// 2. 刪除 Session Cookie(預設名稱 PHPSESSID)
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}
// 3. 銷毀伺服器端資料
session_destroy();
header("Location: login.php");
exit;
?>

常見錯誤與最佳實踐

  • 未呼叫 session_start() 直接操作 $_SESSION → 無效且產生 Notice。
  • 輸出內容前未啟動 Session → "Cannot send session cookie - headers already sent"。解決:調整程式順序或啟用 output_buffering。
  • session_destroy() 後仍可讀取 $_SESSION → 僅刪除儲存檔,當前請求的 $_SESSION 仍存在,需手動清空。
  • 安全設定:session.cookie_httponly=1、session.cookie_secure=1(HTTPS)、session.use_strict_mode=1。

Session 儲存介質擴充

預設使用檔案系統(session.save_handler = files),高併發或分散式架構建議改用 Redis/Memcached:

ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379?auth=password');

或實作 SessionHandlerInterface 自訂資料庫儲存。

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