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:
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.
5 Réponses :
J'ai temporairement résolu mon problème en utilisant htaccess:
Header edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure
Je l'ai résolu en éditant .htaccess
<ifmodule mod_headers.c> Header always edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure </ifmodule>
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();
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
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.
Je l'ai résolu par:
<?php session_start(); header('Set-Cookie: PHPSESSID= ' . session_id() . '; SameSite=None; Secure');
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.
$_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 lecookie
avant de pouvoir vérifier si lasession
est définie ou non