Ich bin gerade durch all dies auf der Suche nach einer einfachen Lösung gegangen. Ich habe es zuerst aus der Katerperspektive betrachtet.
Tomcat gibt keinen direkten Zugriff auf die Konfiguration des Domain-Cookies für die Sitzung, und ich wollte definitiv nicht benutzerdefinierte Patch Tomcat, um das Problem zu beheben, wie in einigen anderen Posts gezeigt.
Ventile in Tomcat scheint auch eine Problemlösung aufgrund der Einschränkungen beim Zugriff auf Header & Cookies in die Servlet-Spezifikation eingebaut werden. Sie scheitern auch vollständig, wenn die HTTP-Antwort festgelegt wird, bevor sie an Ihr Ventil übergeben wird.
Da wir unsere Anfragen über Apache übertragen, bin ich dann zur Verwendung des Apache gegangen, um das Problem zu beheben.
Ich habe zuerst versucht, die mod_proxy Direktive ProxyPassReverseCookieDomain, aber es funktioniert nicht für JSESSIONID Cookies, weil Tomcat nicht das Domain-Attribut und ProxyPassReverseCookieDomain kann nicht funktionieren, ohne eine Art von Domäne als Teil des Cookies.
Ich bin auch auf einen Hack mit ProxyPassReverseCookiePath gestoßen, wo sie den Pfad neu geschrieben haben, um dem Cookie ein Domänenattribut hinzuzufügen, aber das fühlte sich für eine Produktionsstätte zu unordentlich an.
Ich habe es schließlich funktioniert, indem ich die Response-Header mit dem Modul mod_headers in Apache neu geschrieben habe, wie von Dave oben erwähnt.
Ich habe die folgende Zeile in der virtuellen Host-Definition hinzugefügt:
Header edit Set-Cookie "(JSESSIONID\s?=[^;,]+?)((?:;\s?(?:(?i)Comment|Max-Age|Path|Version|Secure)[^;,]*?)*)(;\s?(?:(?i)Domain\s?=)[^;,]+?)?((?:;\s?(?:(?i)Comment|Max-Age|Path|Version|Secure)[^;,]*?)*)(,|$)" "$1$2; Domain=.example.com$4$5"
Das vor allem eine einzige Zeile in der Config sein sollte. Es ersetzt alle JSESSIONID Cookies Domain-Attribute durch ".example.com". Wenn ein JSESSIONID-Cookie kein Domänenattribut enthält, fügt das Muster ein solches mit dem Wert ".example.com" hinzu. Als Bonus leidet diese Lösung nicht unter dem doppelten JSESSION-Cookies-Problem der Ventile.
Das Muster sollte mit mehreren Cookies im Set-Cookie-Header funktionieren, ohne die anderen Cookies in der Kopfzeile zu beeinflussen. Es sollte auch modifizierbar sein, um mit anderen Cookies zu arbeiten, indem JSESSIONID im ersten Teil des Patterns auf den von Ihnen gewünschten Cookie-Namen geändert wird.
Ich bin nicht reg-ex-Power-User, also bin ich sicher, es gibt ein paar Optimierungen, die an das Muster gemacht werden könnten, aber es scheint für uns so weit zu arbeiten.
Ich werde diesen Beitrag aktualisieren, wenn ich irgendwelche Fehler mit dem Muster finde. Hoffentlich wird das einige von euch davon abhalten, die letzten paar Tage Frustrationen durchzustehen, wie ich es getan habe.
+1 Genau das, was ich gesucht habe! Schließlich haben sie den Patch enthalten. – Kdeveloper