PHP setcookie “SameSite=Strict”?

2022-08-30 07:56:07

我最近在属性“Same Site”上阅读了“RFC 6265”,我看了一些文章,这些文章在2016年4月谈到了,“同一站点”属性已经为Chrome 51和Opera 39实现了......

我想知道当前的PHP是否支持使用此属性创建cookie?

参考:


答案 1

1. 对于 PHP >= v7.3

您可以使用数组来设置值,例如:$optionssamesite

setcookie($name, $value, [
    'expires' => time() + 86400,
    'path' => '/',
    'domain' => 'domain.example',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'None',
]);

同一站点元素的值应为 、 或 。NoneLaxStrict

手册页中阅读更多内容。

2. 对于 PHP < v7.3

您可以使用以下解决方案/解决方法之一,具体取决于您的代码库/需求

2.1 使用 Apache 配置设置 SameSite Cookie

您可以将以下行添加到 Apache 配置中

Header always edit Set-Cookie (.*) "$1; SameSite=Lax"

这将使用标志更新您的所有cookieSameSite=Lax

在这里查看更多: https://blog.giantgeek.com/?p=1872

2.2 使用Nginx配置设置同站点cookie

location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}

同样在这里,这也将更新您的所有cookie与标志SameSite=Lax

在这里查看更多: https://serverfault.com/questions/849888/add-samesite-to-cookies-using-nginx-as-reverse-proxy

2.3 使用方法设置同站点 Cookieheader

众所周知,Cookie只是HTTP请求中的一个标头,具有以下结构

Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax

所以我们可以用方法设置饼干header

header("Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax");

事实上,Symfony并没有等待PHP 7.3,并且已经在引擎盖下做了,请参阅此处


答案 2

推荐