PHP SameSite 会话问题,会话不起作用

Joh*_*ree 10 php cookies session samesite

我希望有人能给我一些关于我的问题的想法。我正在尝试应用 SameSite cookie 来使会话工作,但它似乎不起作用。访问的网站html:

<iframe src="https://www.example.com/test/iframe.php"></iframe>
Run Code Online (Sandbox Code Playgroud)

iframe 源站点:

    <?php
    header('Set-Cookie: cross-site-cookie=PHPSESSID; SameSite=None; Secure');
    session_start();
    if(!isset($_SESSION['test'])){
        echo 1;
        $_SESSION['test'] = 'ee2';
    }else{
        echo $_SESSION['test'];
    }
Run Code Online (Sandbox Code Playgroud)

如果我访问该网站,我仍然会A cookie associated with a cross-site resource at https://www.example.com/ was set without the SameSite attribute. It has been blocked, as Chrome now only delivers cookies with cross-site requests if they are set with SameSite=None and Secure.在浏览器控制台中收到消息并且会话未保存。

奇怪的是,cookie实际上已经设置好了: 在此处输入图片说明

我错过了什么吗?如果设置了跨站点 cookie,为什么我会在控制台中收到此消息,会话不工作的原因可能是什么?我正在使用 php 7.1.33。如果我直接打开 iframe,它可以正常工作,并且如果我使用浏览器打开站点,但在默认情况下没有启用 SameSite cookie 标志进行测试,它也可以正常工作。

Beh*_*iry 11

我通过编辑 .htaccess 解决了它

<ifmodule mod_headers.c>
Header always edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure
</ifmodule> 
Run Code Online (Sandbox Code Playgroud)


RoC*_*uCk 9

设置会话和 cookie 参数 php:https : //www.php.net/manual/en/function.session-set-cookie-params.php 浏览器:https : //developer.mozilla.org/en-US/docs/ Web/HTTP/Headers/Set-Cookie/SameSite

<?php
session_set_cookie_params(["SameSite" => "Strict"]); //none, lax, strict
session_set_cookie_params(["Secure" => "true"]); //false, true
session_set_cookie_params(["HttpOnly" => "true"]); //false, true
session_start(); //everything before this
Run Code Online (Sandbox Code Playgroud)

或 php.ini:

[Session]
session.cookie_samesite = "Strict"
session.cookie_secure = 1
session.cookie_httponly = 1
Run Code Online (Sandbox Code Playgroud)

  • 这就是答案,但请记住,将“Secure”或“HttpOnly”设置为“任何内容”(包括“false”)将在 cookie 中启用它。要关闭这些属性中的任何一个,请勿将它们设置为任何内容,即不要对它们调用“session_set_cookie_params”。 (2认同)

Joh*_*ree 5

我使用 htaccess 临时解决了我的问题:

Header edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure
Run Code Online (Sandbox Code Playgroud)