删除 jsessionid 在 url 重写 在春季 mvc

2022-09-02 09:46:45

我正在使用spring MVC,并且在jsessionid中遇到了一个问题,我发现如果浏览器中没有启用cookie,则会在url中注入jsessionid,从而产生这样的URL:

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

实际上,浏览器没有问题,但是当Google抓取我的网站时,似乎Google抓取工具没有cookie:),它们以该形式存储我网站的网址,我的网站出现在搜索结果中,其网址类似于包含jsessionid的网址。

实际上,它运行没有任何问题,但我更喜欢在没有jsessionid的情况下在Google搜索结果中显示URL。

有什么帮助吗?


答案 1

直截了当:只要用户不登录或执行POST操作,就不要让您的应用程序创建会话。不要调用 或 。不要为非登录用户创建或管理会话范围的 Bean。确保您使用的框架不会不必要地创建会话,除非您说这样做。request.getSession()request.getSession(true)

如果由于应用程序的设计方式或所使用的(MVC)框架的限制/错误,这确实是不可能的,那么您最好的选择是将Googlebot请求重定向到没有JSESSIONID标识符的URL。你可以使用Tuckey的URL重写过滤器(比如说,这是Apache HTTPD众所周知的mod_rewrite Java变体)。下面是其配置示例页面的相关提取。

隐藏 jsessionid for request from googlebot.


<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>

答案 2

Spring可以配置为不这样做:为什么jsessionid附加到每个URL?

可以将 Web 应用程序配置为阻止它:http://randomcoder.org/articles/jsessionid-considered-harmful


推荐