Selon l'article ici https://php.watch/articles/PHP-Samesite-cookies et la documentation PHP sur https://www.php.net/manual/en/session.security.ini.php , il n'y en a que 2 options de configuration possibles pour cette nouvelle fonctionnalité, ajoutée dans PHP 7.3:
Pourtant, selon la console Chrome, cela doit être défini sur "Aucun":
Un cookie associé à une ressource
SameSite
à l'URL a été défini sans l'attributSameSite
. Il a été bloqué, car Chrome ne délivre désormais des cookies avec des demandesSameSite=None
que s'ils sont définis avecSameSite=None
etSecure
. Vous pouvez consulter les cookies dans les outils de développement sous Application> Stockage> Cookies et voir plus de détails sur URL et URL.
Pour cette raison, je ne peux plus définir de cookies intersites. Quelle est la solution de contournement?
6 Réponses :
Vous pouvez définir la valeur sur "Aucun" en utilisant ini_set
. Il n'y a pas de vérification que la valeur est prise en charge lorsque cette fonction est utilisée:
session_set_cookie_params(['samesite' => 'None']); session_start();
session_set_cookie_params
peut également le définir:
ini_set('session.cookie_samesite', 'None'); session_start();
Le rapport de bogue pour que cela soit pris en charge dans php.ini est ici .
Comme @shrimpwagon l'a dit dans un commentaire ci - dessous , session.cookie_secure
doit être true
pour que cela fonctionne. PHP n'en a pas besoin, mais les navigateurs le font.
Merci - J'ai pu utiliser le code suivant pour me débarrasser du message Chrome et permettre aux cookies intersites de continuer à fonctionner: session_set_cookie_params (['samesite' => 'None', 'secure' => true]);
attention, samesite = none n'est pas pris en charge dans les anciens navigateurs et rejettera complètement le cookie. vérifiez ceci et assurez-vous d'exclure les anciens navigateurs lorsque vous définissez un attribut de même site sur votre cookie de session:chromium.org/updates/same-site/incompatible-clients
La configuration de session.cookie_samesite = None dans le php.ini n'a PAS fonctionné en PHP 7.3.15. L'utilisation de session_set_cookie_params comme décrit ci-dessus a fonctionné.
Légèrement incorrect. session_set_cookie_params(['SameSite' => 'None', 'Secure' => true]);
être: session_set_cookie_params(['SameSite' => 'None', 'Secure' => true]);
@shrimpwagon Mis à jour
Cette méthode peut être utile pour vous
Ajoutez les attributs d'en-tête sur nginx
sous Secure
+ SameSite=None
emplacement / {
proxy_cookie_path / "/; secure; SameSite = none";
}
Ça marche sur moi!
Ne fais pas ça. Certains navigateurs sont buggés et rejetteront complètement les cookies avec SameSite = None. Vous devez d'abord renifler le UserAgent.Voici une explication de Google .
J'utilise cakephp 1.3. J'ai besoin d'un cookie backend au front-end qui n'est pas le même domaine. vérifiez en détail ici.
ini_set('session.cookie_secure', "1"); ini_set('session.cookie_httponly', "1"); ini_set('session.cookie_samesite','None'); session_start();
php 7.4 même site dans phpinfo entrez la description de l'image ici
php 7.2 samesite n'existe pas dans phpinfo entrez la description de l'image ici
$currentCookieParams = session_get_cookie_params(); $cookie_domain= 'your domain'; if (PHP_VERSION_ID >= 70300) { session_set_cookie_params([ 'lifetime' => $currentCookieParams["lifetime"], 'path' => '/', 'domain' => $cookie_domain, 'secure' => "1", 'httponly' => "1", 'samesite' => 'None', ]); } else { session_set_cookie_params( $currentCookieParams["lifetime"], '/; samesite=None', $cookie_domain, "1", "1" ); } session_start();
Ù… ÙˆÙ Ù ‚باشید
Pour PHP 5.6.40, il existe une solution de contournement (le paramètre hack on path) qui n'implique pas la reconstruction de PHP.
Si vous n'avez aucun problème à reconstruire le binaire PHP, j'ai réussi à porter cette fonctionnalité de PHP 7.3 à PHP 5.6.40, et il y a maintenant une pull request. J'en avais besoin pour nos projets qui n'ont pas encore migré. Je sais que la branche 5.6 est obsolète, je ne fais que partager.
Demande d'extraction: https://github.com/php/php-src/pull/6446
Notre repo avec les modifications: https://github.com/Inducido/php-src/tree/PHP-5.6.40
Build testé sur Debian 8.11
Session: . Ajout de la prise en charge de la directive de cookie SameSite pour setcookie (), setrawcookie () et session_set_cookie_params (). Port de la branche PHP 7.x, ils ont tous un paramètre supplémentaire "samesite" à la toute fin (chaîne)
prototypes:
bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]]]]) bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]]]]) void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly[, string samesite]]]]]) (session_get_cookie_params updated too)
none
n'est interprété comme false
dans les fichiers ini.Cela résout le problème "Ce cookie défini a été bloqué en raison des préférences de l'utilisateur" dans Chrome.
vous pouvez vérifier ici avec l'en-tête php. stackoverflow.com/a/63481019/6128573