Session 在伺服器端儲存用戶資料,透過 **Session ID**(預設 PHPSESSID)在客戶端(Cookie)與伺服器關聯。同一瀏覽器、同一站點僅有一個 Session ID。
<?php
session_start(); // 必須在任何輸出前呼叫
?>
<?php
session_start();
$_SESSION['username'] = 'nostop';
$_SESSION['age'] = 23;
echo $_SESSION['username']; // nostop
echo $_SESSION['age']; // 23
?>
session_register()(已棄用/移除)<?php
session_start();
$Name = '範例';
session_register('Name'); // 註冊變數名,非字串 '$Name'
// 等同 $_SESSION['Name'] = $Name;
?>
<?php
session_start();
unset($_SESSION['username']); // 刪除單一鍵
// 或
session_unregister('username'); // 舊版
?>
<?php
session_start();
session_unset(); // 釋放所有 $_SESSION 變數
session_destroy(); // 刪除伺服器端 Session 檔案與 Cookie
?>
<?php
session_start();
if (!isset($_SESSION['gender'])) { // 建議用 isset()
$_SESSION['gender'] = 'female';
}
?>
<?php
$name = session_name(); // 取得預設 'PHPSESSID'
session_name('MYAPP_SESS'); // 設定新名稱(需在 session_start() 前)
?>
<?php
$id = session_id(); // 取得目前 ID
session_id('custom_id_123'); // 設定指定 ID(需在 session_start() 前)
?>
方法一:手動 setcookie(相容性最佳)
<?php
session_start();
$lifeTime = 24 * 3600; // 1 天
setcookie(session_name(), session_id(), time() + $lifeTime, '/');
?>
方法二:session_set_cookie_params(需在 session_start() 前)
<?php
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime, '/', '.example.com', true, true); // path, domain, secure, httponly
session_start();
$_SESSION['admin'] = true;
?>
注意: IE 6 對
session_set_cookie_params有 Bug,建議統一用setcookie手動控制。
<?php
$savePath = __DIR__ . '/session_data';
if (!is_dir($savePath)) mkdir($savePath, 0755, true);
session_save_path($savePath); // 必須在 session_start() 前
session_start();
?>
原因: session_start() 前有輸出(空白、HTML、echo、BOM)。
解決: 確保 session_start() 在檔案最開頭,或開啟 ob_start() 緩衝輸出。
原因: 預設儲存路徑 /tmp 不存在或無寫入權限(Windows 環境常見)。
解決:
C:\tmpphp.ini:session.save_path = "C:/tmp"session_save_path()。session.cookie_secure = 1、session.cookie_httponly = 1。session_regenerate_id(true) 重新生成 ID。session.cookie_domain = '.example.com' 限制子域共享。