使用标题(“Set-cookie”)与setcookie()函数设置cookie

时间:2013-06-06 21:03:59

标签: 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};");
  }

现在我已经被分配到重构代码我计划使用setcookie函数,根据php.net基本上做同样的事情。

我的问题是:两者之间有什么区别,我应该使用哪一种?

注意:这段代码是很久以前写的,所以我假设当时setcookie不存在?

4 个答案:

答案 0 :(得分:3)

没有充分的理由不使用setcookie。上面的代码没有正确编码名称和值,因此重构至少有一个主要好处。

答案 1 :(得分:2)

这两个函数之间的区别在于header()是设置HTTP标头的常规功能,而setcookie()专门用于设置Set-Cookie标头。

因此,

header()采用包含完整标头的字符串,而setcookie()采用几个特定于Cookie的参数,然后从中创建Set-Cookie标头。

答案 2 :(得分:0)

这是一个您不能使用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");

请注意,设置相同站点属性

时,需要安全选项。

答案 3 :(得分:-2)

很大的不同是,setcookie始终设置host_only = false,您对此无能为力。

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