7
votes

Problème de session PHP SameSite, la session ne fonctionne pas

J'espère que n'importe qui pourra me donner quelques idées sur mon problème. J'essaie d'appliquer le cookie SameSite pour faire fonctionner la session, mais il semble que cela ne fonctionne pas. Le site visité html:

    <?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'];
    }

Site source Iframe:

<iframe src="https://www.example.com/test/iframe.php"></iframe>

Si je visite le site Web, je reçois toujours 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. le message dans la console du navigateur et la session ne sont pas enregistrés.

Ce qui est étrange, c'est que le cookie a été défini: entrez la description de l'image ici

Est-ce que je manque quelque chose? Pourquoi est-ce que j'obtiens ce message dans la console si un cookie intersite est défini et quelles pourraient être les raisons pour lesquelles la session ne fonctionne pas? J'utilise php 7.1.33. Si j'ouvre directement iframe, cela fonctionne et cela fonctionne également correctement si j'ouvre le site avec un navigateur où je n'ai pas activé le drapeau de cookies SameSite par défaut pour les tests.


3 commentaires

$_SESSION['test'] quelle est la valeur? ur définir un cookie pas la session.


Oui, mais la session semble ne pas fonctionner à cause du cookie PHPSESSID, je suppose. La valeur sera toujours vide, même si j'actualise la page, la valeur n'est pas stockée dans $ _SESSION ['test']. Mais si j'ouvre directement l'iframe, il stockera la valeur «ee2».


d'abord, appelez, définissez la session et le cookie avant de pouvoir vérifier si la session est définie ou non


5 Réponses :


3
votes

J'ai temporairement résolu mon problème en utilisant htaccess:

Header edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure


0 commentaires

7
votes

Je l'ai résolu en éditant .htaccess

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


0 commentaires

1
votes

J'ai écrit un cours pour ça.

https://github.com/ovunctukenmez/SameSiteSessionStarter

Il vérifie également si le navigateur prend correctement en charge le paramètre du même site.

Au lieu de session_start ();
Utilisez comme ceci:

<?php
require_once 'SameSiteSessionStarter.php';

//start samesite none php session
SameSiteSessionStarter::session_start();


0 commentaires

3
votes

Définir le paramètre session & cookies php: https://www.php.net/manual/en/function.session-set-cookie-params.php Navigateur: https://developer.mozilla.org/en-US/docs/ Web / HTTP / En-têtes / Set-Cookie / SameSite

[Session]
session.cookie_samesite = "Strict"
session.cookie_secure = 1
session.cookie_httponly = 1

OU php.ini:

<?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


1 commentaires

C'est la réponse, mais gardez à l'esprit que définir Secure ou HttpOnly sur n'importe quoi , y compris false , l' HttpOnly dans le cookie. Pour désactiver l'une de ces propriétés, ne les définissez sur rien, c'est-à-dire n'appelez pas session_set_cookie_params dessus.



1
votes

Je l'ai résolu par:

<?php

session_start();
header('Set-Cookie: PHPSESSID= ' . session_id() . '; SameSite=None; Secure');


1 commentaires

Veuillez restaurer votre question, afin que ce fil puisse toujours être utile pour les futurs lecteurs. Ils pourraient rencontrer le même problème que vous.