簡體   English   中英

使用 header(“Set-cookie”) 與 setcookie() 函數設置 cookie

[英]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 的用例

  • 你在 PHP<7.3 上運行一個網站
  • 您必須設置“SameSite”cookie 屬性

您可以通過利用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM