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

PHP setcookie() 完全指南:常見失效原因與解決方案

     編輯:PHP 綜合知識

PHP Cookie 設定失效?90% 是這個原因

setcookie() 必須在**任何輸出之前**呼叫,因為 Cookie 是透過 HTTP Response Header 設定。一旦有輸出(含空白、BOM、echo),Header 即鎖定無法修改。

典型錯誤場景

<?php
echo "歡迎"; // 輸出內容
setcookie('name', 'value'); // 錯誤!Header 已發送
?>

開啟 error_reporting(E_ALL) 會看到:

Warning: Cannot modify header information – headers already sent by (output started at ...)

正確寫法

<?php
// 1. 設定 Cookie(最頂端,無任何輸出前)
setcookie('page', 'a.php', time() + 3600, '/'); // 有效期 1 小時,全站可用

// 2. 讀取 Cookie(下次請求才會出現在 $_COOKIE)
$page = $_COOKIE['page'] ?? 'unknown';

// 3. 輸出 HTML
?><!DOCTYPE html>
<html><body>
From <?= htmlspecialchars($page) ?><br><br>
<a href="b.php">Go to b.php</a>
</body></html>

關鍵參數詳解

參數說明範例
nameCookie 名稱'user_id'
value儲存值(自動 urlencode)'john'
expireUnix 時間戳,0 或省略為瀏覽器關閉失效time()+86400 (1天)
path生效路徑,'/' 代表全域'/'
domain生效域名,預設為當前域名'.example.com'
secure僅 HTTPS 傳輸true
httponly禁止 JS 存取,防 XSStrue

完整範例:跨頁面追蹤來源

a.php

<?php
setcookie('page', 'a.php', time()+3600, '/');
$from = $_COOKIE['page'] ?? 'unknown';
?><!DOCTYPE html>
<html><body>
From <?= htmlspecialchars($from) ?><br><br>
<a href="b.php">Go to b.php</a>
</body></html>

b.php

<?php
setcookie('page', 'b.php', time()+3600, '/');
$from = $_COOKIE['page'] ?? 'unknown';
?><!DOCTYPE html>
<html><body>
From <?= htmlspecialchars($from) ?><br><br>
<a href="a.php">Back to a.php</a>
</body></html>

除錯清單

  1. 確認 setcookie() 在 <?php 開啟標籤後**第一行**執行
  2. 檢查檔案編碼為 **UTF-8 無 BOM**
  3. 確認無 include/require 引入的檔案有輸出
  4. 開啟 error_reporting(E_ALL) 捕捉警告
  5. 瀏覽器開發者工具 Network 標籤檢查 Set-Cookie Header
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved