Php 使用标头(“Set cookie”)和setcookie()函数设置cookie

Php 使用标头(“Set cookie”)和setcookie()函数设置cookie,php,cookies,Php,Cookies,我正在重构一些代码,发现了一些我从未见过的东西。该功能用于用户登录时设置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};"); } 现在我已经被分配到重构代码,我计划使用setco

我正在重构一些代码,发现了一些我从未见过的东西。该功能用于用户登录时设置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()
专门用于设置
setcookie


因此,
header()
接受一个包含完整头的字符串,而
setcookie()
接受几个特定于cookie的参数,然后从这些参数创建
Set cookie
头。

一个很大的区别是,setcookie总是将host\u only设置为false,对此您无能为力


因此,如果出于任何原因必须设置host_only=true,则必须使用header方法。据我所知。

这里有一个不能使用setcookie的用例

  • 您在phpy上运行一个网站,您可能会发现它很有用,如中所示。这是设置cookies的第三个选项。老实说,永远不要直接设置HTTP头。使用内置PHP函数或此处引用的构造函数,使用自动生成的标头值设置具有正确转义值的Cookie。在32位系统上,setcookie()不会通过2038。这是嵌入式平台上的web服务器的一个问题(不会更新)。
    setcookie()
    如果不使用兼容包,就没有与Psr-7等效的版本。