[英]issue with setting expiry time of cookie in PHP header() vs setcookie()
[英]Setting cookie using header(“Set-cookie”) vs setcookie() function
我正在重構一些代碼並發現了一些我從未見過的東西。 該函數用於用戶在登錄時設置cookie:
function setUserCookie($name, $value) {
$date = date("D, d M Y H:i:s",strtotime('1 January 2015')) . 'GMT';
header("Set-Cookie: {$name}={$value}; EXPIRES{$date};");
}
現在我已經被分配到重構代碼,我計划使用setcookie
函數,它根據 php.net 基本上做同樣的事情。
我的問題是:兩者之間有什么區別,我應該使用哪一個?
注意:這段代碼是很久以前寫的,所以我假設當時setcookie
不存在?
沒有充分的理由不使用 setcookie。 上面的代碼沒有正確編碼名稱和值,所以這至少是重構的一大好處。
這兩個函數的區別在於header()
是用於設置 HTTP 標頭的通用函數,而setcookie()
專門用於設置Set-Cookie
標頭。
因此header()
接受一個包含完整頭的字符串,而setcookie()
接受幾個特定於 cookie 的參數,然后從它們創建Set-Cookie
頭。
這是一個不能使用 setcookie 的用例
您可以通過利用 setcookie 中的錯誤來實現這一點,但我不會依賴於隨着時間的推移而修復的錯誤: setcookie('samesite-test', '1', 0, '/; samesite=strict');
或者你可以使用 PHP頭函數: header("Set-Cookie: samesite-test=1; expires=0; path=/; samesite=Strict");
請注意,設置samesite屬性時需要安全選項
一個很大的區別是, setcookie 總是設置 host_only=false 並且你無能為力。
因此,如果您出於任何原因必須設置 host_only=true ,則必須使用 header 方法。 我所知道的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.