SESSION跨域访问的相关总结

来源:互联网 发布:守望先锋cg 知乎 编辑:程序博客网 时间:2024/06/06 01:17

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

 

 

0 0
原创粉丝点击