20

私はSpring MVCを使用していて、jsessionidに問題があります.ブラウザでCookieが有効になっていない場合、jsessionidがURLに挿入されていることがわかりました.

http://localhost/categories;jsessionid=Bsls4aQFXA5RUDcmZKV5iw?cid=13001

実際にはブラウザに問題はありませんが、Google が私のサイトをクロールすると、Google クローラーは Cookie を持っていないようです :)、彼らは私のサイトの URL をその形式で保存し、私のサイトは jsessionid を含む URL のような URL を持つ検索結果に表示されます。

実際には問題なく動作していますが、Google の検索結果に jsessionid なしで明確に URL が表示されるようにしたいと考えています。

何か助けはありますか?

4

5 に答える 5

19

要点: ユーザーがログインしたり、POST アクションを実行したりしない限り、アプリにセッションを作成させないでください。request.getSession()またはに電話しないでくださいrequest.getSession(true)。ログインしていないユーザーのセッション スコープ Bean を作成または管理しないでください。使用しているフレームワークが不要にセッションを作成しないことを確認してください。

アプリケーションの設計方法や、使用されている (MVC) フレームワークの制限やバグが原因でこれが本当に不可能な場合は、Googlebot リクエストを JSESSIONID 識別子のない URL にリダイレクトすることをお勧めします。これには、 Tuckey の URL 書き換えフィルターを使用できます(これは、たとえば、Apache HTTPD の既知の .xml の Java バリアントですmod_rewrite)。これは、構成例ページからの関連性の抜粋です。

googlebot からのリクエストの jsessionid を非表示にします。


<outbound-rule>
     <name>Strip URL Session ID's</name>
     <note>
         Strip ;jsession=XXX from urls passed through response.encodeURL().
         The characters ? and # are the only things we can use to find out where the jsessionid ends.
         The expression in 'from' below contains three capture groups, the last two being optional.
             1, everything before ;jesessionid
             2, everything after ;jesessionid=XXX starting with a ? (to get the query string) up to #
             3, everything ;jesessionid=XXX and optionally ?XXX starting with a # (to get the target)
         eg,
         from index.jsp;jsessionid=sss?qqq to index.jsp?qqq
         from index.jsp;jsessionid=sss?qqq#ttt to index.jsp?qqq#ttt
         from index.jsp;jsessionid=asdasdasdsadsadasd#dfds - index.jsp#dfds
         from u.jsp;jsessionid=wert.hg - u.jsp
         from /;jsessionid=tyu - /
     </note>
     <condition name="user-agent">googlebot</condition>
     <from>^(.*?)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$</from>
     <to>$1$2$3</to>
 </outbound-rule>
于 2011-03-11T18:10:51.873 に答える
11

Spring はそれを行わないように構成できます: 各 URL に jsessionid が追加されるのはなぜですか?

それをブロックするように Web アプリケーションを構成できます: http://randomcoder.org/articles/jsessionid-considered-harmful

于 2011-03-11T18:16:50.010 に答える
0

URL の jsessionid を取り除く最も簡単な方法は、j_spring_security_check を呼び出しているログイン ページのタグに変更することです。

<c:url var="authUrl" value="/static/j_spring_security_check" />
    <form action="${authUrl}" method="post">
于 2014-04-24T17:55:42.160 に答える
0

ボット (googlebot など) を検出した場合にカスタム HttpServletResponse を使用するフィルターを挿入します。これは、encodeUrl メソッドをオーバーライドして生の URL を返すだけです。フィルターがボットを検出しない場合は、単にチェーンを続行させ、URL エンコーディングなどをデフォルトどおりに続行させます。

于 2011-05-30T05:48:51.390 に答える