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

GGi*_*Gio 8 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};");
  }
Run Code Online (Sandbox Code Playgroud)

既然我已被分配到重构代码我计划使用的setcookie功能基本上根据php.net做同样的事情.

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

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

asm*_*her 8

没有充分的理由不使用 setcookie。上面的代码没有正确编码名称和值,所以这至少是重构的一大好处。


Seb*_*ner 5

这两个函数的区别在于,header()通用函数是设置HTTP headers,而setcookie()专门设置Set-Cookieheader。

header()因此采用包含完整标头的字符串,同时setcookie()采用几个特定于 cookie 的参数,然后Set-Cookie从它们创建标头。


Tak*_*man 5

这是一个不能使用 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属性时需要安全选项