許多開發者誤以為 setcookie('name', 'value', time()+0) 即可建立「瀏覽器關閉即失效」的 Session Cookie,實際上這會導致 Cookie 立即過期。正確做法是將 expire 參數直接設為 0,並注意 domain 參數的設定。
<?php
$USERID = "PHPer";
$CookieTime = 0;
setcookie("USERID", $USERID, time() + $CookieTime, "/", "pcpchina.com");
// 錯誤:expire = 當前時間戳 + 0 = 當前時間,Cookie 即刻過期
?>
<?php
$USERID = "PHPer";
setcookie("USERID", $USERID, 0, "/", ""); // expire=0 表示 Session Cookie
// domain 留空表示當前域名;若需支援子域名可設為 ".example.com"
?>
| 參數 | 說明 |
|---|---|
| expire = 0 | 瀏覽器進程結束時自動刪除(Session Cookie) |
| expire > 0 | Unix 時間戳,指定絕對過期時間 |
| domain | 留空 = 當前域名;.example.com = 含所有子域名 |
| path | 建議設為 / 使全站有效 |
首次載入頁面不會輸出 $_COOKIE['USERID'],因為 Cookie 於下一次 HTTP 請求才會隨標頭送回伺服器。重新整理頁面後即可看到值。
若僅需伺服器端儲存狀態,建議直接使用 session_start() 搭配 $_SESSION 超全域變數,PHP 會自動管理 Session ID Cookie(預設即為 Session Cookie),更安全且方便。