Ich arbeite an Laravel 5.4.30.
Stellen Sie sich vor, wir hätten eine Domain example.com
und eine Subdomain von dev.example.com
. Die Hauptdomäne ist für den Master-Zweig und die Dev-Subdomäne ist für den Zweig "Entwickeln". Wir haben ein Cookie-Benachrichtigungssystem, das nach dem Klicken auf Hide Cookie Notice
ausgeblendet wird. Dies funktioniert, indem Sie für immer ein Cookie setzen.
Wir haben die SESSION_DOMAIN
-Konfigurationen für jede Domäne für jede Umgebung festgelegt.
Für die Hauptdomain:
%Vor%Für Dev-Subdomain:
%Vor% Jetzt kommt das Problem von hier. Wenn wir zu example.com
gehen und auf den Cookie-Hinweis ausblenden klicken, wird ein Cookie für die Hauptdomain immer gesetzt. Danach gehen wir zum dev.example.com
und machen dasselbe. Also wird ein Cookie für Subdomain gesetzt. Aber dieser Cookie wurde nach dem vorherigen gesetzt. (Die Reihenfolge ist wichtig)
Wenn wir die Subdomain aktualisieren, werden wir diese Benachrichtigung wieder sehen! (nicht versteckt) Der Browser hat den Hauptcookie wegen .example.com
im domain
Parameter des Cookies im Browser gelesen, so dass jede Subdomain betroffen ist. Aber die Ansicht zeigt immer noch den Hinweis, weil sie kein Cookie zum Ausblenden lesen kann.
Jedenfalls möchte ich diesen Cookie nicht über alle Subdomains hinweg teilen. Wie kann ich das erreichen? Ich denke, ich sollte ein Präfix für den Cookie-Namen hinzufügen. Aber ich weiß nicht, wie es geht, dass Laravel dem Cookie-Namen automatisch ein Präfix hinzufügt.
Irgendwelche Lösungen?
Sie müssen Ihr eigenes "Abrufen" und "Setzen" eines Cookies implementieren.
Erstellen Sie sich neue Klasse (überall Sie mögen, aber ich tun würde, app / Stiftung / Fassaden / ) mit dem Namen Plätzchen.
%Vor%Öffnen Sie nun config / app.php und ändern Sie den entsprechenden Alias (Cookie).
Erstellen Sie sich einen neuen Anbieter (verwenden Sie artisan) und kopieren Sie Code aus Illuminate \ Cookie \ CookieServiceProvider.php und ändern Sie die Namensräume. Öffnen Sie erneut config / app.php und ändern Sie den entsprechenden Dienstanbieter mit dem neuen.
Erstellen Sie sich eine neue Klasse (wo immer Sie wollen, aber ich würde app / Foundation / Cookie / ) mit dem Namen CookieJar machen.
%Vor%Aktualisieren Sie den Code in Ihrem eigenen Cookie-Dienstanbieter, um Ihre Implementierung von CookieJar (Zeile 19) zu verwenden.
Führen Sie $ composer dump-autoload
aus, und Sie sollten fertig sein.