【问题标题】:PHP setting a Session-Cookie with samesitePHP 设置同站点的 Session-Cookie
【发布时间】:2020-02-07 14:35:11
【问题描述】:

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

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

我想在上面的语句中添加一个额外的参数 where ($cookie_samesite="Lax")

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

语句的新输出如下所示

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

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

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

PHP setcookie "SameSite=Strict"?

【问题讨论】:

    标签: php cookies


    【解决方案1】:

    经过进一步研究...

    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】:

      从 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'
      ]);
      

      在 PHP

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

      【讨论】:

      • 他说他没有7.3,所以他在另一个以前的版本中寻找答案
      • @nbk 不,他说他无法测试它,因为尚未安装 7.3。 7.3以下是无法通过cookie参数实现的,那么就需要改header了。此外,这是我在搜索后登陆的页面,所以它可能也适用于其他人,首先获取 cookie 参数然后再次设置它们是额外的开销。我认为这是 7.3+ atm 的最佳方法。
      • 这是我需要的答案。但我也终于升级到 PHP7.3 并对其进行了测试,以确认它工作正常。 - 感谢您的回复。
      • 同事们,PHP
      • 我在 php 5.6 - 在 iF​​rame 中设置 cookie 我使用此代码让我的页面在 Chrome 84 上再次运行: session_set_cookie_params(3600*24, '/;SameSite=None', $ _SERVER['HTTP_HOST'], true);将安全设置为“真”很重要。 (最好关闭浏览器并清除缓存进行测试)
      【解决方案3】:

      改编自 SilverShadow 答案,但修复了 php 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
          ));
      }
      

      【讨论】:

      • 这应该是公认的答案,因为 PHP
      • 非常好的破解!谢谢!
      猜你喜欢
      • 2011-04-10
      • 2020-02-21
      • 2023-03-15
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多