跨域、跨服务器调用时候session丢失的问题总结!!!
来源:互联网 发布:音乐编辑软件手机版 编辑:程序博客网 时间:2024/04/30 07:14
这篇文档是最近一次工作中遇到问题的总结,且听我娓娓道来:(可能有很多地方不对,我只是这样想通拉。)
最近新进一个公司,做的项目是手机支付系统。由于涉及到金钱相关的,所以安全性要求特别的高。项目分了很多个子系统,在部署(测试)的时候是每个Tomcat上面只放一个子系统。比如现在有5个子系统,那么就会对应5个Tomcat启动了放在linux上面的。为什么这么做?试想如果在上线以后,如果其中一个系统有问题要重启服务器,5个子系统都放在一起的话,那不是全部都会跟着重启了!现在说说我们遇到的问题了。
用户登录后,在管理子系统,有一个充值连接,会跳到充值子系统去充值。这样跨JVM的跳转只能用redirect来跳,但是用户自己的登录状态就会丢失了(登录session丢失)。后来改为forward跳转到自己的jsp页面,然后在form提交到充值子系统去充值。在本地开发测试的时候session是不会丢失的,但是发布到linux下面的Tomcat就会丢失。找了各种原因都以为是操作系统差异的问题。
后来发现一个这样的区别,开发测试是两个IP不同的端口号的跳转,发布到linux上面测试是同一个IP不同的端口号的跳转。这样涉及到对浏览器session和cookies的了解程度拉。
首先session是存放在容器里面的,而且一次会话的session会生成一个jsessionid,在管理session的时候是根据jsessionid去寻找,能找到就不会创建新的session,找不到才创建新的session,确定这才是一次新的会话。而cookies是存放在客户端的文件。jsessionid也会放到cookies里面。
两个IP、两个端口就会有两个session、两个cookies这样session是会丢失的。首先在管理子系统第一次登录会生成一个jsessionid,在一个cookies里面去是找不到这个session的。就会创建登录成功的session。然后跳转到充值子系统,也会在充值子系统生成一个jsessionid,到另一个cookies里面去找这个session也是找不到的,也会创建一个session。以前的session就这样丢失拉。
一个IP、两个端口就会有两个session、一个cookies这样session也是会丢失的。首先在管理子系统第一次登录会生成一个jsessionid,在cookies里面去是找不到这个session的。就会创建登录成功的session。然后跳转到充值子系统,也会在充值子系统生成一个jsessionid,到同样这个cookies里面去找这个session也是找不到的,也会创建一个session覆盖以前的session。
解决把法就是不让jsessionid自动生成,放到cookies里面。而是在url里面传递jsessionid,不用靠cookies。说通俗点这个就叫url重写。
这样在管理系统第一次登录会生成一个jsessionid,创建登录session。当到充值系统的时候我会把jsessionid传过去那边也会生成一个session。意思就是两个容器各自生成了各自的session,但是共用的同一个jsessionid。这样每次到容器里面去取session内容都是根据同一个jsessionid去取,如果创建过的话。里面肯定是能拿到的。但是里面的内容各自创建的又不一样。这样session就不会丢失老!!!
要让url重写有很多方法,比如:
<c:url value=""/>
response.encodeRedirectUrl("");
response.encodeUrl("");
等多种方法。但要让cookies里面的jsessionid不被使用就需要浏览器完全禁用cookies等。还有个简单的方法就是在Tomcat里面配置:
tomcat_home/conf/context.xml里面把<Context>改为<Context cookies = "false">这样就好拉!!!
然后url就会自动变成这个样子:
http://127.0.0.1:8080/login.do;jsessionid=66B0A8E2B78940C7B1BB16ABB8E0D3E9?method=toLogin
- 跨域、跨服务器调用时候session丢失的问题总结!!!
- 跨域、跨服务器调用时候session丢失的问题总结!!!
- SpringMVC解决跨域问题,以及跨服务器调用时候session丢失的问题总结!!!
- SpringMVC解决跨域问题,以及跨服务器调用时候session丢失的问题总结!!!
- 服务器session丢失问题
- 服务器间访问session丢失的问题
- Session丢失问题总结
- Session丢失问题总结
- Session丢失问题总结
- Session丢失问题总结
- session丢失问题总结
- 用P3P header解决IE下iframe跨域访问时候session丢失的问题
- Session丢失的问题!
- iis6+window2003的服务器上SESSION丢失的问题
- 两个应用相互调用导致的session丢失问题
- Weblogic10跨域Session丢失的问题
- iframe跨域Session丢失问题的解决办法
- 关于asp.net Session丢失问题的总结
- android直接把打印信息输出到文件
- android学习笔记
- Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)!
- IT人士-幸福一生
- Unable to update index for nexus_mirror
- 跨域、跨服务器调用时候session丢失的问题总结!!!
- 带参数的main函数
- (一)设计包含min函数的栈
- 泛化、依赖、关联、聚合、组合
- 离散事件仿真
- 多线程编程之计算限制型异步操作(续)
- joj 2575: Moveable quadrangle with three edges ()
- 字符串类型处理实战
- iPhone开发重构:提取公用的方法以清理重复代码