Wie behebt man „Dieses gesetzte Cookie wurde aufgrund von Benutzereinstellungen blockiert“ in Chrome? (Stackoverflow-SSO-Anmeldung/Ajax-CORS-Anfrage)

Lesezeit: 4 Minuten

Benutzeravatar des Avatars
Benutzerbild

Es scheint, dass das kürzliche Update von Chrome auf Version 83.0.4103.116 eine Änderung in der Cookie-Behandlung gebracht hat.

Ich stelle meinen Benutzern ein Single-Sign-On zur Verfügung, das sie bei mehreren Websites anmeldet. Ähnlich wie bei Stackoverflow mache ich eine AJAX-Anfrage mit Jquery:

crossDomain: true, 
xhrFields: { withCredentials: true },

Und in PHP erlaube ich die Domain:

// needed for cross-domain request
header('Access-Control-Allow-Origin: https://www.example.com');
header('Access-Control-Allow-Credentials: true');

Allerdings funktioniert es jetzt nicht mehr.

In der Dev-Konsole habe ich eine neue Warnung mit dem Tooltip gefunden:

“Dieses Set-Cookie wurde aufgrund von Benutzereinstellungen blockiert”

Chrome-Warn-Tooltip

Wie kann man das beheben?

Aktualisieren:

Ich sehe gerade, dass das Single-Sign-On von Stackoverflow auch nicht mehr funktioniert!

Geben Sie hier die Bildbeschreibung ein

PS: Eine verwandte Frage schlägt vor, Ihren Benutzern zu sagen, dass sie die Chrome-Einstellungen ändern sollen. Aus meiner Sicht möchte ich dies vermeiden. Stellen Sie sich vor, SO würde Millionen von Benutzern informieren, um die Cookies für eine einmalige Anmeldung zu aktivieren …

  • @Jay Blanchard: Ich habe ausdrücklich gesagt, dass es nicht darum geht, die Chrome-Einstellungen zu ändern (was eine akzeptierte Antwort in der anderen Frage ist). Und es befasst sich nicht mit Single-Sign-On, Ajax und PHP. – Bitte seien Sie so nett und entfernen Sie das Schließen-Flag.

    – Benutzerbild

    25. Juni 2020 um 14:54 Uhr


  • Haben Sie alle Duplikate recherchiert und festgestellt, dass keines zu Ihnen gehört?

    – Jay Blanchard

    25. Juni 2020 um 14:57 Uhr

  • Na sicher. ZB stackoverflow.com/… oder google google.com/… … Und noch einmal, nur um auf die Bedeutung hinzuweisen, alle SO/Stackexchange-Benutzer werden betroffen sein.

    – Benutzerbild

    25. Juni 2020 um 15:00 Uhr


  • Scheint, dass die Standardeinstellungen für die Neuinstallation in Chrome Cookies von Drittanbietern (alle) blockieren sollen. Dies kann ein Anstieg der SameSite-Anforderungen in einem späteren Versionsupdate sein. Ich denke, dies dient dem Schutz der Benutzer vor sich selbst, was ein kleines Problem darstellt, wenn Chrome entscheidet, dass eines Ihrer eigenen Cookies ein Cookie eines Drittanbieters ist (Cookie, das von einer Domäne gesetzt wird, die nicht die aktuelle Domäne ist).

    – Unglaublicher Hut

    25. Juni 2020 um 15:13 Uhr

  • @FunkFortyNiner Nein, wir brauchen eine technische Lösung. In den nächsten Tagen werden viele Websites/Entwickler auf dasselbe Problem stoßen.

    – Benutzerbild

    25. Juni 2020 um 15:19 Uhr

Benutzeravatar von AML
AML

Wenn Sie dies nur im Inkognito-Modus replizieren können und die Antwort von Pierre Pretorius nicht geholfen hat, werden Sie wahrscheinlich von einer Änderung in Chrome 83 getroffen, bei der Cookies von Drittanbietern standardmäßig im Inkognito-Modus blockiert werden. Sehen https://angel.co/today/stories/chrome-83-arrives-with-redesigned-security-settings-third-party-cookies-blocked-in-incognito-21796

Ich glaube nicht, dass Sie viel tun können, um dies zu ändern, und Google beabsichtigt, dies in Zukunft zum Standardverhalten zu machen: https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox

EDIT: Google wird dies frühestens 2023 umsetzen https://blog.google/products/chrome/updated-timeline-privacy-sandbox-milestones/

Die Website, die die passiert set-cookie Der HTTP-Header muss auch die übergeben SameSite wie None und auch Securesonst wird das Cookie nicht gespeichert und ignoriert.

Set-Cookie: qa_session=...; SameSite=None; Secure

Bevor Sie dies tun, lesen Sie bitte die Auswirkungen auf die Sicherheit:
https://blog.heroku.com/chrome-changes-samesite-cookie

PHP-Codebeispiel (Quelle):

function setcookieSameSite($name, $value, $expire, $path, $domain, $secure, $httponly, $samesite="None")
{
  if (PHP_VERSION_ID < 70300) {
        setcookie($name, $value, $expire, "$path; samesite=$samesite", $domain, $secure, $httponly);
  }
  else {
      setcookie($name, $value, [
          'expires' => $expire,
          'path' => $path,
          'domain' => $domain,
          'samesite' => $samesite,
          'secure' => $secure,
          'httponly' => $httponly,
      ]);
   }
}

  • Trotzdem gibt es etwas, das mein Browser nicht mag. Das Cookie kommt wie folgt: Set-Cookie: JSESSIONID=somevaluehere; path=/my-site-path;SameSite=None;Sicher, aber der Browser sagt immer noch, dass er es nicht setzen will. Hinweis: Die re/rsp befindet sich innerhalb eines Iframes.

    – Viktor

    16. Oktober 2020 um 12:51 Uhr

  • Ich habe es behoben: Das Problem war, dass ich in Chrome im Inkognito-Modus getestet habe. Außerdem gab es eine Standardeinstellung in Chrome, die angab, dass der Inkognito-Modus keine Cookies von Drittanbietern akzeptieren sollte. Also, ich habe die Option aktiviert und die Cookies werden jetzt gespeichert.

    – Viktor

    16. Oktober 2020 um 14:26 Uhr

  • für PHP 5.6.40 Wenn Sie kein Problem haben, die PHP-Binärdatei neu zu erstellen, habe ich es geschafft, dieses Feature von PHP 7.3 auf PHP 5.6.40 zu portieren, und es gibt jetzt einen Pull-Request. Die vollständige Antwort finden Sie hier: stackoverflow.com/a/64960472/1641763

    – Nadir

    22. November 2020 um 23:28 Uhr

Wählen Sie die erste Option unter „Cookies und andere Websitedaten“ in den Chrome-Einstellungen, die „Alle Cookies zulassen“ lautet. Bei mir hat es funktioniert.

Überprüfen Sie dieses Bild

Dies geschieht, wenn Sie möglicherweise “Cookies von Drittanbietern blockieren” im Browser aktiviert haben. Das kannst du einchecken:

Settings → Site Settings → Cookies and site data → Block third-party cookies

oder auch erhältlich über:

chrome://settings/content/cookies

Ändern Sie diese Einstellung auf “Alle Cookies zulassen”.

Benutzeravatar von Nadir
Nadir

Dies ist auf eine wesentliche Änderung bei der Cookie-Behandlung zurückzuführen, um CSRF zu entschärfen. Nach diesem Entwurf: https://datatracker.ietf.org/doc/html/draft-west-first-party-cookies-07

Die obigen Problemumgehungen funktionieren nicht (die Funktion setcookieSameSite), da Sie das Samesite-Flag auf der Sitzungskennung setzen müssen (ich kann sehen, dass die PHPSESSID auch diese Nachricht enthält, dh “Dieses Set-Cookie wurde aufgrund von Benutzereinstellungen blockiert”). Oder vielleicht indem Sie den Pfad session_set_cookie_params ausprobieren? (ungetestet).

In eigentümlich für PHP 5.6-Zweigmüssen Sie das Cookie-Attribut der Sitzung festlegen.

btw Es scheint, dass das qa_session-Cookie in Ihrem Screenshot ein zufälliges Cookie ist, für dieses ist es in Ordnung, @Pierre-Pretorius-Antwort zu verwenden, es wird funktionieren.

für PHP 5.6.40 siehe meine andere Antwort hier: https://stackoverflow.com/a/64960472/1641763

1404670cookie-checkWie behebt man „Dieses gesetzte Cookie wurde aufgrund von Benutzereinstellungen blockiert“ in Chrome? (Stackoverflow-SSO-Anmeldung/Ajax-CORS-Anfrage)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy