69

tomcat の URL で jsessionid を無効にすることはできますか? jsessionid は検索エンジンにあまり適していないようです。

4

8 に答える 8

68

このフィルターを使用して検索エンジンのみを無効にすることもできますが、検索エンジンに優しくないだけでなく、すべての応答に対して使用することをお勧めします。特定のセキュリティ エクスプロイトに使用できるセッション ID を公開します (詳細)。

Tomcat 6 (6.0.30 より前)

tuckey 書き換えフィルターを使用できます。

Tuckey フィルターの設定例:

<outbound-rule encodefirst="true">
  <name>Strip URL Session ID's</name>
  <from>^(.*?)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$</from>
  <to>$1$2$3</to>
</outbound-rule>

Tomcat 6 (6.0.30 以降)

コンテキスト構成でdisableURLRewritingを使用して、この動作を無効にすることができます。

Tomcat 7 および Tomcat 8

Tomcat 7 以降では、セッション構成に以下を追加できます。

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>
于 2009-06-07T20:33:05.137 に答える
53
 <session-config>
     <tracking-mode>COOKIE</tracking-mode>
 </session-config> 

Tomcat7およびTomcat8は、Webアプリweb.xmlで上記の構成をサポートします。これにより、URLベースのセッションが無効になります。

于 2011-05-19T21:22:11.803 に答える
19

Tomcat 6.0では、disableURLRewritingを使用してこれを行うことができます。

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

例えば

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_WEBAPP" path="/CONTEXT" disableURLRewriting="true">
</Context>

Tomcat 7.0内では、これはアプリケーション内で次のように制御されます。ServletContext.setSessionTrackingModes()

Tomcat 7.0は、サーブレット3.0の仕様に従います。

于 2011-04-11T16:58:27.927 に答える
13

、、およびから変更されていない URL を単に返すでFilterをラップするすべての URL で を使用します。responseHttpServletResponseWrapperencodeRedirectUrlencodeRedirectURLencodeUrlencodeURL

于 2009-06-07T20:57:53.603 に答える
5

プールの回答からの引用:

tuckey 書き換えフィルターを使用できます。

このフィルターを使用して検索エンジンのみを無効にすることもできますが、検索エンジンに優しくないだけでなく、すべての応答に対して使用することをお勧めします。特定のセキュリティ エクスプロイトに使用できるセッション ID を公開します (詳細)。

これにより、jsessionid が表示されなくなっても、Cookie ベースのセッション処理が引き続き許可されることに注意してください。(彼の他の投稿から引用: web.xml で HttpSession をオフにできますか? )

PS。コメントするには十分な評判がありません。そうでなければ、これを上記の彼の投稿にコメントとして追加したでしょう。

于 2010-04-14T07:34:49.763 に答える
4

Tomcat 6.0 では、Tomcat インストールの /config パスから context.xml に disableURLRewriting="true" を使用できます。

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

context.xml ファイル

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context disableURLRewriting="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

</Context>

...

tomcat の出力は、検索エンジンに適しています...

楽しみ

于 2012-02-25T17:25:36.077 に答える
2

また、Tomcatの前にApacheがある場合は、mod_rewriteフィルターを使用してjsessionを取り除くことができます。

以下をapache構成に追加します。

#Fix up tomcat jsession appending rule issue
RewriteRule  ^/(.*);jsessionid=(.*) /$1 [R=301,L]

これにより、jsessionidのないページへの301リダイレクトが実行されます。明らかに、これはurl jsessionidを完全に無効にしますが、これは私が必要としていたものです。

乾杯、マーク

于 2010-12-21T04:30:06.520 に答える
2

デフォルトでは、Cookie は Tomcat サーバーで有効になっています (server.xml の要素で cookies=true を使用して明示的に設定できます)。Cookie を有効にすると、セッションは Cookie を使用して管理されるため、URL に jsessionID が追加されなくなります。ただし、Cookie が有効になった後でも、最初のリクエストの URL に jsessionID が追加されます。これは、Web サーバーがその段階で Cookie が有効になっているかどうかを認識していないためです。このような jsessionID を削除するには、tuckey 書き換えルールを使用できます。

詳細については、http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.htmlを参照してください。

<outbound-rule encodefirst="true">
    <note>Remove jsessionid from embedded urls - for urls WITH query parameters</note>
    <from>^/(.*);jsessionid=.*[?](.*)$</from>
    <to encode="false">/$1?$2</to>
</outbound-rule>

<outbound-rule encodefirst="true">
    <note>Remove jsessionid from embedded urls - for urls WITHOUT query parameters</note>
    <from>^/(.*);jsessionid=.*[^?]$</from>
    <to encode="false">/$1</to>
</outbound-rule>

詳細については、http://javatechworld.blogspot.com/2011/01/how-to-remove-jsessionid-from-url-java.htmlを参照してください。

于 2011-03-12T15:24:30.430 に答える