SESSION跨域访问的相关总结
跨域session:
分服务端与客户端jar。
1.服务端:
服务端数据存储在sqlite中,使用唯一标识sessionid来标识sessionid用户,有单独线程处理过期session数据。
2.客户端
<1>客户端不同浏览器session时效问题解决:客户端添加session数据时只需传递request对象,为了唯一标识一个浏览器窗口,使用httpsession存储session id,在其他浏览器打开时可以使用httpsession中是否存在sessionid来判断是否更换浏览器来使session失效。
<2>客户端相同浏览器窗口失效问题解决:使session失效时间与自研session的失效时间一致,将httpsession的失效时间同步到服务端进行存储。
客户端客户端获取session数据时只需传递session id即可。
3.测试:因我们的项目均把contextPath设置为“/”,相同域不同应用之间session会相互覆盖。
session是通过在客户端生成一个cookie,所有请求会带上这个cookie。一个cookie的NAME、Domain和Path属性值均相同,则会覆盖,若未设置Domain域,则域为ip(不包括端口),因此应用A的session被应用B的session覆盖了。
经测试:tomcat、weblogic、websphere的session默认都是JSESSIONID 为key来识别的,因此在没有特别设置下,同一个域下的多个应用session会互相覆盖。
4.是否能解决相同域不同端口导致session覆盖的问题?
使用cookie存储是有问题的,存储完session后是无法立即使用的,因为cookie必须http请求结束后才能写入浏览器。
设置sessionCookieName即可。如下:
通过在contex中设置:
1 <Context sessionCookieName="jss" >
2.内嵌Tomcat:tomcat.addWebapp("/",WEB_APP_PATH).setSessionCookieName("JSESSIONID:"+startPort);
5.测试
设置完后导致读取session时读取不到上次设置的session数据,导致每次都会生成新的session。
6.
- 上一篇: mysql实现查询最近7天的数据
- 下一篇: LAMP环境安装禅道(源码安装)