两个不同的JFinal项目,同一浏览器打开,session会受影响。

blus 发布于 2017/09/29 10:49
阅读 553
收藏 0

【华为云1024程序员节·向云而生】预约直播 抽14件华为电子产品礼包!>>>

@JFinal 波总你好,想跟你请教个问题:

我们分别在两个tomcat(端口不同)下,部署了不同的jfinal应用,tomact1部署项目p1,tomcat2部署项目p2。当我在同一个浏览器里面打开p1和p2时,后打开的应用会把前一个应用里面的session数据清空。我开始一直以为是我的服务器设置或者某一部分代码导致了问题的产生。

后来我就用我们jfinal官网的demo(增加了简单的session赋值),分别部署在两个tomcat下面,发现也会出现这个问题。

我又用了一个非jfinal框架的应用和咱们的demo测试,发现就没有出现这个问题。

我们现在的项目,基本上都是统一要求用咱们的jfinal框架来开发的,很担心后面这个问题找不到原因和解决办法。

所以,我想请教一下波总,是不是我们在使用咱们jfinal框架的时候,对session的某些配置,我们没有考虑到呢?或者波总能不能帮我分析一下原因,提供一个基于咱们jfinal框架下的一个解决办法呢?谢谢!

加载中
0
JFinal
JFinal

    在本质上来说,这个问题肯定与 jfinal 无关,因为 jfinal 并不会干预 session 的生成、赋值、取值,这个可以通过查看 Controller 中的 getSession()、setSessionAttr(...)、getSessionAttr(...) 的源代码来看出来

    jfinal 仅仅是转调了 java web 规范中的 HttpServletRequest 中 session 相关 api 的而已,强调:仅仅是转调了一下而已,例如:转调的是 request.getSession()、session.setAttribute(...)、session.getAttribute(...)。

        如果 jfinal 下有这个问题,那么别的框架也会有这个问题,除非别的框架并没有使用 java web 规范的 session api,而是自己写了代码去创建 session

    解决办法其实很简单,tomcat 默认的 session 使用的 cookie name 是 "jsessionid",只要对不同的应用使用不同的 cookie name 就可以了,例如 jfinal.com 用的就是 "jfinalId" 这个 cookie name 来存取 session 变量

0
JFinal
JFinal

     还有一个更简单的办法,就是在访问不同项目的时候使用不同的域名,因为 cookie name 是区分域名的,你也可以试试,项目 p1 使用 localhost 访问,而项目 p2 使用 127.0.0.1 来访问,或许这都是可以的

     总而言之,只要搞清楚了 session 的 cookie 机制,一切都明朗。这一切无疑与 jfinal 无关

Mr_Qi
Mr_Qi
回复@JFinal : 对的~这个是网页标准~~~无论用play!还是正常的servlet都有这个问题的
0
b
blus

@JFinal 明白了,波总,我从session的根源上检查一下了。但是,波总,如果你有时间的话,你可以用咱们项目的demo里面做一个简单的测试,确实出现了这个问题^__^。谢谢波总。

0
如梦技术
如梦技术

你还是没明白波总的意思,给你贴个链接,这篇文章讲的比较清楚:

http://blog.csdn.net/u010093570/article/details/43764373

0
b
blus

@如梦技术 谢谢!非常感谢!确实我理解偏颇了,我开始的时候发现两个jsessionId的值一样,一直在停留在如何修改生成的sessionId的值的路子上了。

JFinal
JFinal
@如梦技术 给的这个贴子,比我的回复操作上要具体,可直接改 server.xml 来实现:http://blog.csdn.net/u010093570/article/details/43764373
0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

同一个浏览器不同标签也是同一个session的

0
冷冷zz
冷冷zz
在web.xml配置不同的sessionid名称
0
b
blus

非常感谢大家,正按照@如梦技术 提供的方法在做

返回顶部
顶部