【问题标题】:What is the proper syntax for setcookie() in php 7.3?php 7.3 中 setcookie() 的正确语法是什么?
【发布时间】:2020-03-16 23:45:26
【问题描述】:

PHP 7.3 中 setcookie() 的正确语法是什么?我通常像这样使用 setcookie():

setcookie("genone", "genoneinfo", "$cookie_expiration_time","/","",1,1);

这行得通,但是如何添加相同站点选项?我试过这样,但它失败并出现 php 错误:

setcookie("genone", "genoneinfo", "$cookie_expiration_time","/","",1,1,['samesite'=>'Lax']);

错误:PHP 警告:setcookie() 最多需要 7 个参数,在第 73 行给出 zzz.com/index.php 的 8 个参数,引用者:https://zzz.com/

谢谢, 托德

【问题讨论】:

  • 我是一个初级程序员,不懂语法...看起来我需要使用一大堆括号...此外,他们声明了示例中的所有变量类型……这是必需的吗?我从来没有在 php 中声明过变量类型...
  • 文档中的括号表示可选参数。存在类型,因此您知道该参数接受哪种输入。类型声明仅用于函数定义,而不是在您调用它们时。您只需像在问题的代码示例中所做的那样传递您需要的内容,您只需使用替代语法。
  • 喜欢这个? setcookie ("genone" [, "genoneinfo" [, "$cookie_expiration_time" [, "/" [, "" [, 1 [, 1 ]]]]]] ) : bool 然后我必须添加同一个站点的东西.. . 像这样?: setcookie ("genone" [, "genoneinfo" [, "$cookie_expiration_time" [, "/" [, "" [, 1 [, 1 [, "SameSite=Lax" ]]]]]]] ) : 布尔
  • 没有。正如我所说,文档中的括号仅表示“可选参数”,如“如果您可以使用默认值,您可以跳过此参数”。

标签: php setcookie


【解决方案1】:

PHP 7.3 为 setcookie() 引入了另一种语法:

添加了支持选项数组的替代签名。此签名还支持设置 SameSite cookie 属性。

这意味着您只需像在旧版本中一样提供前两个参数,并将其余参数放在一个选项数组中:

setcookie('genone', 'genoneinfo', [
    'expires' => $cookie_expiration_time,
    'path' => '/',
    'domain' => '',
    'secure' => true,
    'httponly' => true,
    'samesite' =>'Lax',
]);

根据文档中的描述,旧版本中的参数名称成为数组键:

一个关联数组,它可能具有 expirespathdomainsecure、httponly 和 samesite。这些值与同名参数的含义相同。

【讨论】:

  • 你太棒了......非常感谢你!!!我现在正在阅读 php 手册中的示例并与您的示例进行比较,以便我可以完全理解发生了什么......再次感谢!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2014-04-19
  • 2018-11-14
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多