牛骨文教育服务平台(让学习变的简单)
博文笔记

SESSION跨域访问的相关总结

创建时间:2015-11-27 投稿人: 浏览次数:2492

跨域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.

 

 

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。