PHP使用相同的网站设置会话Cookie

时间:2019-10-10 07:52:53

标签: php cookies

我目前有一个PHP脚本,可按以下方式设置Sametime Cookie:

    session_set_cookie_params($cookie_timeout, $cookieParams["path"], $cookie_domain, $session_secure, $cookie_httponly);

我想通过在其中添加一个额外的参数($ cookie_samesite =“ Lax”)

来向上述语句添加samesite =“ Lax”

    session_set_cookie_params($cookie_timeout, $cookieParams["path"], $cookie_domain, $session_secure, $cookie_httponly, $cookie_samesite);

语句的新输出看起来像

  

1800,/,“ .vasports.com.au”,1,1,“松懈”

这是samesite参数的正确格式吗?

注意:我尚未安装PHP7.3。因此,我无法正确测试。 我已经将PHP doco称为“ session_set_cookie_params”。 我也检查了

PHP setcookie "SameSite=Strict"?

3 个答案:

答案 0 :(得分:2)

从PHP 7.3开始,您可以将一个options数组放入支持SameSite的set_cookie_params中。

session_set_cookie_params([
    'lifetime' => $cookie_timeout,
    'path' => '/',
    'domain' => $cookie_domain,
    'secure' => $session_secure,
    'httponly' => $cookie_httponly,
    'samesite' => 'Lax'
]);

答案 1 :(得分:0)

经过进一步研究...

  1. 首先获取当前参数。
  2. 然后根据需要更改参数,在这种情况下为[samesite] =“ Lax”。
  3. 设置cookie。
    $cookieParams = session_get_cookie_params();
    $cookieParams[samesite] = "Lax";
    session_set_cookie_params($cookieParams);

检查您的“ set-cookie:”标题,现在您应该像这样在结尾处看到文本“ SameSite = Lax”。

    set-cookie: ssid=b930bc608a911781f459a4f46b2c513d; expires=Wed, 16-Oct-2019 10:48:49 GMT; Max-Age=1800; path=/; secure; HttpOnly; SameSite=Lax

答案 2 :(得分:0)

改编自SilverShadow答案,但修复了php <7.3的语法, 由于session_set_cookie_params()直到7.3才能将数组作为单个参数,因此需要设置每个参数。 并自动检测php版本的正确选项,因此即使以后升级到7.3,也可以使用它:

// set as your own needs:
$maxlifetime = 0;
$path = '/';
$domain = '';
$secure = false;
$httponly = false;
$samesite = 'lax'; // here is what we need

if(PHP_VERSION_ID < 70300) {
    session_set_cookie_params($maxlifetime, $path.'; samesite='.$samesite, $domain, $secure, $httponly);
} else {
    // note I use `array()` instead of `[]` to allow support of php <5.4
    session_set_cookie_params(array(
        'lifetime' => $maxlifetime,
        'path' => $path,
        'domain' => $domain,
        'secure' => $secure,
        'httponly' => $httponly,
        'samesite' => $samesite
    ));
}