3

次のような状況があります。

JSESSIONID は Cookie と URL の両方で送信されていますが、Adobe Flash BUG のため、それらは異なります (実際には、Cookie JSESSIONID は間違っています)。

やりたいことは、Cookie で送信された URL の代わりに、URL JSESSIONID を使用することです。つまり、request.getSession() を実行すると、Cookie ではなく URL の ID に関連付けられた HttpSession が返されるはずです。

Tomcat7 のソース コードを調べたところ、実際、Tomcat は最初に URL を解析し、識別子を検索しました。次に、Cookie SESSIONID が存在する場合は、それをオーバーライドします。CoyoteAdapter.java (tomcat 7.0.26) で切り取られたコードは次のとおりです。

        String sessionID = null;
        if (request.getServletContext().getEffectiveSessionTrackingModes()
                .contains(SessionTrackingMode.URL)) {

            // Get the session ID if there was one
            sessionID = request.getPathParameter(
                    SessionConfig.getSessionUriParamName(
                            request.getContext()));
            if (sessionID != null) {
                request.setRequestedSessionId(sessionID);
                request.setRequestedSessionURL(true);
            }
        }

        // Look for session ID in cookies and SSL session
        parseSessionCookiesId(req, request);
        parseSessionSslId(request);

Cookie JSESSIONID をまったく無効にすることもできますが、Web サイトのすべての URL で使用しているため、無効にすることはできません。JUST THIS SPECIFIC URL の Cookie を無効にしたいと考えています。

出来ますか?この問題を解決するための他のアイデアや回避策はありますか?

4

1 に答える 1

-1

リクエスト、レスポンス、およびセッション オブジェクトを独自のラッパーに置き換えるカスタムサーブレット フィルタを実装できます。ラッパーは、元のセッション インスタンスにデリゲートするかどうかなど、URL に基づいて異なる動作をすることができます。ただし、Tomcat コードを変更しない限り、他の ID のセッション データにアクセスすることはできません。

于 2012-04-17T14:36:23.940 に答える