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?

Dane Iracleous
quelle

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 .

Anonym
quelle
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
1

Schlecht:

session.cookie_samesite=None

Richtig:

session.cookie_samesite="None"

Erklärung hier

vitaliytv
quelle
Tu das nicht. Einige Browser sind fehlerhaft und lehnen Cookies mit SameSite = None vollständig ab. Sie müssen zuerst den UserAgent schnüffeln. Hier ist eine Erklärung von Google .
Sagen Sie
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!

Thanh Phong Đỗ
quelle