Wie kann PHP angewiesen werden, SameSite = None für Cross-Site-Cookies zu verwenden?


8

Laut dem Artikel hier https://php.watch/articles/PHP-Samesite-cookies und PHP-Dokumentation unter https://www.php.net/manual/en/session.security.ini.php gibt es nur 2 Mögliche Konfigurationsoptionen für diese neue Funktion, hinzugefügt in PHP 7.3:

  1. session.cookie_samesite = Lax
  2. session.cookie_samesite = Streng

Laut der Chrome-Konsole muss dies jedoch auf "Keine" gesetzt sein:

Ein Cookie, das einer standortübergreifenden Ressource unter URL zugeordnet ist, wurde ohne das SameSiteAttribut gesetzt. Es wurde blockiert, da Chrome Cookies mit standortübergreifenden Anfragen nur dann liefert, wenn sie mit SameSite=Noneund gesetzt sind Secure. Sie können Cookies in Entwicklertools unter Anwendung> Speicher> Cookies überprüfen und weitere Details unter URL und URL anzeigen.

Aus diesem Grund kann ich keine Cross-Site-Cookies mehr setzen. Was ist die Problemumgehung?

Antworten:


10

Sie können den Wert mit auf "Keine" setzen ini_set. Es wird nicht überprüft, ob der Wert unterstützt wird, wenn diese Funktion verwendet wird:

ini_set('session.cookie_samesite', 'None');
session_start();

session_set_cookie_params kann es auch einstellen:

session_set_cookie_params(['samesite' => 'None']);
session_start();

Der Fehlerbericht dafür, dass dies in der php.ini unterstützt wird, ist hier .


3
Vielen Dank. Ich konnte den folgenden Code verwenden, um die Chrome-Nachricht zu entfernen und zuzulassen, dass Cross-Site-Cookies weiter funktionieren: session_set_cookie_params (['samesite' => 'None', 'secure' => true]);
Dane Iracleous

1
Achtung, samesite = none wird in alten Browsern nicht unterstützt und lehnt das Cookie vollständig ab. Überprüfen Sie dies und stellen Sie sicher , alte Browser auszuschließen , wenn ein samesite Attribut auf Ihre Session - Cookie setzen: chromium.org/updates/same-site/incompatible-clients
Volkan Ulukut

Das Setzen von session.cookie_samesite = None in der php.ini funktionierte NICHT in PHP 7.3.15. Die Verwendung von session_set_cookie_params wie oben beschrieben hat funktioniert.
Humbads


0

Diese Methode kann für u hilfreich sein

Fügen Sie die Attribute des Headers nginxunter Secure+ hinzuSameSite=None

Standort / {

proxy_cookie_path / "/; sicher; SameSite = keine";

}}

Es arbeitet an mir!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.