關於tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting參數 html
關於session和cookie參考: java
http://www.blogjava.net/freeman1984/archive/2011/09/02/357833.html apache
http://www.blogjava.net/freeman1984/archive/2010/09/09/331501.html 瀏覽器
http://www.blogjava.net/freeman1984/archive/2010/03/30/316901.html tomcat
tomcat服務端和客戶端經過sessionCookieName參數(默認值:jsessionid)的值來識別session,並在此session中共享數據。在瀏覽器首次請求服務的時候,tomcat服務器會在響應頭信息信息裏面返回: 安全
|
|
告訴瀏覽器保存cookie名爲JSESSIONID的cookie,固然此時爲會話cookie,此cookie是保存在瀏覽器當前會話中的。過時時間爲當前會話結束時。(固然前提是瀏覽器要設置爲接受第三方cookie)
服務器
在下次瀏覽器請求的時候會將此cookie值返回給服務器,固然cookie的名稱同(sessionCookieName參數,確切的來講是同瀏覽器保存的會話cookie的名稱),當服務器接受到此參數的時候,就不會在響應頭信息信息裏面返回Set-cookie
cookie
固然sessionCookieName參數的值是能夠修改的,查看官方文檔: session
sessionCookieName ui |
The name to be used for all session cookies created for this Context. If not set, the default of JSESSIONID will be used. Note that this default will be overridden by the org.apache.catalina.SESSION_COOKIE_NAME system property. |
經過在contex中設置:
1 <Context sessionCookieName="jss" >
或者經過java虛擬機參數
2 -D org.apache.catalina.SESSION_COOKIE_NAME=jss
或者動過設置:
3
固然後兩種的優先級高。
修改以後在查看服務器返回:
當瀏覽器設置了不接受第三方cookie的時候。Tomcat支持經過URLRewrit(將sessionid放在url中)來將session的id傳給服務器來維持會話(固然若是瀏覽器接受會話cookie優先級是從會話cookie中去,也就是url裏面的session參數會被拋棄)。
例如:get.do;jsessionid=1682268A851B4B6A3BAE18871C63AF30
查看tomcat相關源碼:
此時的SESSION_PARAMETER_NAME和sessionCookieName是能夠不相同的(默認相同),經過修改org.apache.catalina.SESSION_PARAMETER_NAME參數來修改,方式以下:
-Dorg.apache.catalina.SESSION_PARAMETER_NAME=jsss
或者:
這樣經過URLRewrit的方式session就不限於麼個瀏覽器或者瀏覽器頁了。只要有此seesionid任何瀏覽器任地方都可以進行訪問,固然就帶來了安全問題。可經過如下參數來禁止URLRewrit傳sessionid,仍然是在tomcat的context.xml文件內設置:
<Context disableURLRewriting="true">
官方文檔:
isableURLRewriting |
Set to true to disable support for using URL rewriting to track session IDs for clients of this Context. URL rewriting is an optional component of the servlet 2.5 specification but disabling URL rewriting will result in non-compliant behaviour since the specification requires that there must be a way to retain sessions if the client doesn't allow session cookies. If not specified, the specification compliant default value of false will be used. |
設置完成後即便你在url裏面加了sessionid的值,服務器仍然會在返回頭信息裏面返回Set-cookie信息。
其餘應用服務器原理大體相同。
~完~
<Context disableURLRewriting="true" />