| 特性 | Cookie | Session |
|---|---|---|
| 存儲位置 | 客戶端瀏覽器 | 服務器端文件/內存/數據庫 |
| 安全性 | 可被竄改、攔截 | 客戶端不可直接修改 |
| 存儲容量 | 4KB限制 | 無實際限制 |
| 生命周期 | 可設置長期 | 默認瀏覽器關閉失效 |
session_start()啟動會話,生成唯一session_idsession_id默認通過Cookie(名PHPSESSID)傳遞session_id讀寫對應存儲文件admin|b:1;user|s:5:"admin";<?php
session_start();
$_SESSION['admin'] = true;
$_SESSION['username'] = 'zhangsan';
$_SESSION['permissions'] = ['read', 'write', 'delete'];
?>
<?php
session_start();
if (isset($_SESSION['admin']) && $_SESSION['admin'] === true) {
echo "歡迎回來,{$_SESSION['username']}!";
} else {
header('Location: /login.php');
exit;
}
?>
<?php
session_start();
// 銷毀單個變量
unset($_SESSION['admin']);
// 徹底銷毀整個會話
session_destroy();
// 可選:刪除客戶端Cookie
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
?>
<?php
session_start();
$lifetime = 24 * 3600; // 1天
setcookie(session_name(), session_id(), time() + $lifetime, '/');
?>
<?php
$lifetime = 24 * 3600;
session_set_cookie_params($lifetime);
session_start();
$_SESSION['admin'] = true;
?>
; php.ini
session.gc_maxlifetime = 86400 ; 24小時
session.gc_probability = 1
session.gc_divisor = 1000 ; 0.1%概率觸發GC
當客戶端禁用Cookie,PHP可自動將session_id附加到URL:
; php.ini
session.use_trans_sid = 1
session.use_only_cookies = 0
生成鏈接如:page.php?PHPSESSID=abc123...,但存在安全風險(URL泄露、書籤洩漏),生產環境建議強制使用Cookie。
session_start()驗證session_regenerate_id(true)session.cookie_httponly = 1防XSS竊取session.cookie_secure = 1多服務器集群需共享Session,主流方案:
session_set_save_handler(),MySQL/PostgreSQL