PHP 使用相同站点设置 Session-Cookie

use*_*609 11 php cookies

我目前有一个 PHP 脚本,用于设置相同时间的 cookie,如下所示:

    session_set_cookie_params($cookie_timeout, $cookieParams["path"], $cookie_domain, $session_secure, $cookie_httponly);
Run Code Online (Sandbox Code Playgroud)

我想通过添加一个额外的参数 where ($cookie_samesite="Lax") 将 samesite="Lax" 添加到上述语句中

    session_set_cookie_params($cookie_timeout, $cookieParams["path"], $cookie_domain, $session_secure, $cookie_httponly, $cookie_samesite);
Run Code Online (Sandbox Code Playgroud)

语句的新输出看起来像

1800, /, ".vasports.com.au", 1, 1, "松懈"

这是相同站点参数的正确格式吗?

注意:我还没有安装 PHP7.3。因此我无法正确测试。我已经将 PHP doco 称为“session_set_cookie_params”。我也检查过

PHP setcookie“SameSite=Strict”?

小智 25

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

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

在 PHP <7.3 上,您可以添加 SameSite 参数,将其添加到“路径”参数中。

session_set_cookie_params([
    'lifetime' => $cookie_timeout,
    'path' => '/;SameSite=none', // <-- this way!
    'domain' => $cookie_domain,
    'secure' => $session_secure,
    'httponly' => $cookie_httponly,
    'samesite' => 'Lax'
]);
Run Code Online (Sandbox Code Playgroud)

  • 他说他没有 7.3,所以他在另一个先前版本中寻找答案 (4认同)
  • 我使用 php 5.6 - 要在 iFrame 中设置 cookie,我使用此代码让我的页面在 Chrome 84 上再次工作: session_set_cookie_params(3600*24, '/;SameSite=None', $_SERVER['HTTP_HOST'], true );将 secure 设置为“true”很重要。(最好关闭浏览器并清除缓存来测试) (2认同)

Die*_*oDD 6

改编自 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
    ));
}
Run Code Online (Sandbox Code Playgroud)