在php中,header()函數用來傳送原始的HTTP標頭,可以透過「header("Set-Cookie:xxxxxxxxxxxxxxxx",false);」的形式來設定cookie。
本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦
header() 函數傳送原始的HTTP 報頭。
header輸出cookie
set cookie函數,如果想要生效,也是透過header設定瀏覽器端進而生效的。所以透過header輸出也是可行的。那麼關於寫出幾個等價的header操作,大家比較學習一下:
header("Set-Cookie:cookie_name1_cp=" . urlencode("浏览器关闭失效")); setcookie("cookie_name1", "浏览器关闭失效");
#更多程式相關知識,請造訪:程式設計影片 ! !
說明:
我們知道,php的setcookie和header都可以設定cookie。但是使用header的時候,還有個注意事項:那就是header和setcookie之間的先後順序,甚至是header和header之間的先後順序。
header("Set-Cookie:")會清除掉:本語句呼叫之前的,所有的header("Set-Cookie:")和setcookie(setrawcookie)的效果。請看下面的例子,設定了四個cookie。但實際上只有一個生效。因為另外三個被最後一個沖掉了。
header("Set-Cookie:cookie_name1_cp=" . urlencode("浏览器关闭失效")); setcookie("cookie_name1", "浏览器关闭失效"); setcookie("cookie_name3", "设置有效域名/https/httponly", time() + 3600*24, "/", $_SERVER['SERVER_NAME'], isset($_SERVER["HTTPS"]),true); header("Set-Cookie:cookie_name3_cp=" . urlencode("设置有效域名/https/httponly") . "; expires=" . gmstrftime("%a, %d-%b-%Y %H:%M:%S GMT", time() + 3600*24) . "; Max-Age=3600; path=/; domain= ".$_SERVER['SERVER_NAME']."; httponly");
解決方法:
為header增加第二個參數,false。就是說:
header("Set-Cookie:xxxxxxxxxxxxxxxx",false);
例如:
header("Set-Cookie:cookie_name3_cp=" . urlencode("设置有效域名/https/httponly") . "; expires=" . gmstrftime("%a, %d-%b-%Y %H:%M:%S GMT", time() + 3600*24) . "; Max-Age=3600; path=/; domain= ".$_SERVER['SERVER_NAME']."; httponly;"); header("Set-Cookie:cookie_name3_cp2=" . urlencode("设置有效域名/https/httponly") . "; expires=" . gmstrftime("%a, %d-%b-%Y %H:%M:%S GMT", time() + 3600*24) . "; Max-Age=3600; path=/; domain= ".$_SERVER['SERVER_NAME']."; httponly;",FALSE);
這樣的話,使用了false參數的header就不會衝突掉原有的了。具體可以參考header的php函數說明:
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
我們的false,設定的就是參數$replace,就是不替換已有同類型header的意思。注意是「同類型」。
更多程式相關知識,請造訪:程式設計影片! !
以上是php header()怎麼設定cookie的詳細內容。更多資訊請關注PHP中文網其他相關文章!