关于tomcat和sessionCookieName和SESSION_PARAMETER_NAME以及disableURLRewriting参数
关于session和cookie参考:
http://www.blogjava.net/freeman1984/archive/2011/09/02/357833.html
http://www.blogjava.net/freeman1984/archive/2010/09/09/331501.html
http://www.blogjava.net/freeman1984/archive/2010/03/30/316901.html
tomcat服务端和客户端通过sessionCookieName参数(默认值:jsessionid)的值来识别session,并在此session*享数据。在浏览器首次请求服务的时候,tomcat服务器会在响应头信息信息里面返回:
告诉浏览器保存cookie名为JSESSIONID的cookie,当然此时为会话cookie,此cookie是保存在浏览器当前会话中的。过期时间为当前会话结束时。(当然前提是浏览器要设置为接受第三方cookie)
在下次浏览器请求的时候会将此cookie值返回给服务器,当然cookie的名称同(sessionCookieName参数,确切的来说是同浏览器保存的会话cookie的名称),当服务器接受到此参数的时候,就不会在响应头信息信息里面返回Set-cookie
当然sessionCookieName参数的值是可以修改的,查看官方文档:
sessionCookieName |
The |
通过在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 |
设置完成后即使你在url里面加了sessionid的值,服务器仍然会在返回头信息里面返回Set-cookie信息。
其他应用服务器原理大致相同。