簡単な解決策を探して、これらすべてを実行しました。私は最初にTomcatの観点からそれを見始めました。
Tomcatは、セッションのドメインCookieを構成するための直接アクセスを提供しません。また、他のいくつかの投稿に示されているように、tomcatにカスタムパッチを適用してその問題を修正したくありませんでした。
サーブレット仕様に組み込まれているヘッダーとCookieへのアクセスに制限があるため、Tomcatのバルブも問題の解決策のようです。http応答がバルブに渡される前にコミットされた場合も、完全に失敗します。
Apacheを介してリクエストをプロキシするため、代わりにapacheを使用して問題を修正する方法に移りました。
最初にmod_proxyディレクティブProxyPassReverseCookieDomainを試しましたが、Tomcatがドメイン属性を設定せず、ProxyPassReverseCookieDomainは、Cookieの一部である何らかのドメインがないと機能しないため、JSESSIONIDCookieでは機能しません。
また、ProxyPassReverseCookiePathを使用して、Cookieにドメイン属性を追加するためにパスを書き換えるハックに遭遇しましたが、それは本番サイトにとって厄介な方法だと感じました。
上記のDaveが述べたように、apacheのmod_headersモジュールを使用して応答ヘッダーを書き直すことで、ようやく機能するようになりました。
仮想ホスト定義内に次の行を追加しました。
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"
上記はすべて、構成内の1行である必要があります。これにより、JSESSIONIDCookieドメイン属性が「.example.com」に置き換えられます。JSESSIONID Cookieにドメイン属性が含まれていない場合、パターンは「.example.com」の値を持つドメイン属性を追加します。ボーナスとして、このソリューションは、バルブの二重JSESSIONCookieの問題に悩まされることはありません。
このパターンは、ヘッダー内の他のCookieに影響を与えることなく、Set-Cookieヘッダー内の複数のCookieで機能する必要があります。また、パターンの最初の部分のJSESSIONIDを任意のCookie名に変更することにより、他のCookieを操作するように変更できる必要があります。
私は正規表現のパワーユーザーではないので、パターンに対していくつかの最適化を行うことができると確信していますが、これまでのところうまく機能しているようです。
パターンにバグが見つかった場合は、この投稿を更新します。うまくいけば、これにより、私が行ったように、ここ数日分の欲求不満を経験する必要がなくなるでしょう。