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

PHP Cookie 與 Session 入門詳解:配置、應用與安全實踐

     編輯:PHP 綜合知識

三種認證方式對比

方式特點適用場景
HTTP Basic Auth瀏覽器原生彈窗,每請求攜帶憑證簡單內部系統、API
Session服務端存儲,客戶端僅存 Session ID傳統 Web 應用、狀態管理
Cookie客戶端存儲,自動隨請求發送記住登錄、偏好設定、追蹤

HTTP Basic Auth 實現

<?php
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
    header('WWW-Authenticate: Basic realm="My Private Area"');
    header('HTTP/1.0 401 Unauthorized');
    exit('Authorization Required.');
}
if ($_SERVER['PHP_AUTH_USER'] !== 'validname' || $_SERVER['PHP_AUTH_PW'] !== 'goodpassword') {
    header('WWW-Authenticate: Basic realm="My Private Area"');
    header('HTTP/1.0 401 Unauthorized');
    exit('Authorization Required.');
}
echo 'You are authorized.';
?>

Cookie 核心 API

<?php
// 設置
setcookie('name', 'value', [
    'expires' => time() + 3600,
    'path' => '/',
    'domain' => '',
    'secure' => true,   // 僅 HTTPS
    'httponly' => true, // 防 XSS
    'samesite' => 'Lax'
]);

// 讀取 (自動解析到 $_COOKIE)
echo $_COOKIE['name'];

// 刪除
setcookie('name', '', ['expires' => time() - 3600]);
?>

Session 核心 API

<?php
session_start();
// 讀寫 $_SESSION 超全局陣列
$_SESSION['user_id'] = 1001;
echo $_SESSION['user_id'];

// 銷毀
session_unset();
session_destroy();
?>

安全最佳實踐

  • Cookie 關鍵資料必須加密簽名 (如 authcode 或 JWT)
  • 啟用 HttpOnly、Secure、SameSite
  • Session ID 定期重生成 session_regenerate_id(true)
  • 敏感操作二次驗證 (CSRF Token、再次輸入密碼)
  • 分佈式環境使用 Redis/Memcached 做 Session 共享存儲
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved