包含 samesite 参数的 PHP setcookie 函数不起作用

标签 php setcookie samesite

我有一个使用这些参数运行的完全可用的 setcookie() php 函数...

<?php

setcookie(
  '_siteauth', 
  Crypt::encrypt(site()->password),
  time() + 86400,
  '/',
);

?>

上面的代码每次都设置一个 cookie,没有问题!

但是一旦我尝试使用 samesite 选项,cookie 就永远不会设置...这是一个问题。

我没有在 iFrame 中运行它。我正在使用 dockers wordpress 图像在本地对此进行测试,我看不出这是一个问题。

一开始在网上看了很多之后,我认为这可能是 PHP 版本冲突,但是在 PHP 7.3.0 之前/之后的测试中都没有成功。

看完https://www.php.net/manual/en/function.setcookie.php

...它表示可以将选项设置为关联数组,包括expirespathdomainsecurehttponlysamesite,但每次我尝试此 php setcookie 方法时,它都没有设置。

这是我在本地转储的 $_SERVER['HTTP_HOST'] 结果...

demo.local.mydomain.com

以下是我所有的本地测试代码尝试,使用 $_SERVER['HTTP_HOST'] 作为域...

<?php

setcookie(
    '_siteauth',
    Crypt::encrypt(site()->password), 
    [
        'expires' => time() + 86400,
        'path' => '/',
        'domain' => $_SERVER['HTTP_HOST'],
        'samesite' => 'None',
        'secure' => false,
        'httponly' => false
    ]
);

?>
<?php

setcookie(
    '_siteauth',
    Crypt::encrypt(site()->password),
    time() + 86400,
    '/; SameSite=none'
);

?>
<?php

setcookie(
    '_siteauth',
    Crypt::encrypt(site()->password),
    [
        'expires' => time() + 86400,
        'path' => '/',
        'domain' => $_SERVER['HTTP_HOST'],
        'secure' => false,
        'httponly' => false,
        'samesite' => 'None'
    ]
);

?>

并且这些代码示例在执行时都没有保存 _siteauth cookie。

我已经尝试了 php 版本 setcookie() 的所有变体,包括 samesite 键和值,但没有保存任何 cookie。

我更改之前的 setcookie() 脚本的原因是 2020 年初 chrome 中的 iframe cookie 策略发生了变化,默认为 samesite Lax。所以我需要在设置 cookie 时强制 samesite None

https://web.dev/samesite-cookies-explained/
https://web.dev/samesite-cookie-recipes/

如果有人能看到我哪里出错了,帮助会很棒。

最佳答案

当您使用 SameSite=None 设置 cookie 时,它​​将被(浏览器)阻止,除非它也具有 Secure,后者在中被省略/设置为 false代码片段。

setcookie(
    '_siteauth',
    Crypt::encrypt(site()->password), 
    [
        'expires' => time() + 86400,
        'path' => '/',
        'domain' => $_SERVER['HTTP_HOST'],
        'samesite' => 'None',
        'secure' => true,
    ]
);

关于包含 samesite 参数的 PHP setcookie 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69783387/

相关文章:

php - setcookie 不起作用

laravel - 如何在 Laravel 中制作 cookie 并指定 SameSite 属性(Lax、None、Strict)?

cookies - Chrome 或任何其他浏览器如何使用公共(public)后缀列表?

php - 如何使用 Laravel 5 获取 HTTP 主机

php - 以周为单位分配一个月,并包含开始日期和结束日期数组

php - 在 PHP 中检测浏览器语言并相应地设置 $locale

php - 如何在 Goutte 中设置 cookie?

php - WooCommerce - 在免费送货可用时隐藏其他送货方式

jquery cookie 将值设置为 bool 值 true

reactjs - 跨站点 cookie 问题 : how to set cookie from backend to frontend