JFinal+undertow的session诡异问题!

@JFinal

一直在用JFinal+undertow做开发。之前都挺正常的,最近一周频繁发现一个问题。

在登录验证通过后,把用户信息存到session里,如下代码所示:

this.setSessionAttr("user", r); //保存登录信息人员信息到session中

可在其他任何controller里都无法通过

this.getSessionAttr("user");

拿到之前存进去的用户对象,怎么样都是null。把myeclipse对退出也不行,只能重启机器。

机器操作系统是mac catalina 10.15.1,mycelipse是2009,JFinal4.7,JFinal-undertow 1.9,undertow 2.0.28,都是最新版。

评论区

lyh061619

2019-11-18 15:06

不贴代码出来的提问都是流氓行为,猜是猜不出你的问题所以,也不至于一个session都让你重启系统,只能告诉你,你的处理方式很暴力。

zzutligang

2019-11-18 16:38

谢谢你的回复,不管你是出于什么目的!我自己来回答吧。不知道是什么原因,在浏览器的开发者工具的application标签里,看到cookie的我的开发域名下竟然有两个SESSIONID变量,这是不正常的,就是这个出现问题了。不知道为什么,理论上来说,这里只能会出现一个SESSIONID才是正常的。删掉所有的,然后就可以了。不知道是不是chrome浏览器升级的时候,遗留下的问题。继续观察中!

zzutligang

2019-11-18 16:40

@lyh061619,无论如何还是谢谢你的回复,我不是补贴代码,我的代码实在太庞大了。确实没法贴代码。贴出来30,50行也说明不了问题。我只是想问有没有人也在undertow下遇到这种问题。只要问题同样存在,那应该就好定位问题点了。最后,再次感谢!

JFinal

2019-11-19 00:59

JFinal-undertow 1.9 所引入的 undertow 版本是 2.0.25, 而你单独引入了一个 undertow 2.0.28。

jfinal undertow 已经引入过了 undertow,而你单独又引入了一个别的版本的 undertow,很可能有冲突

建议删掉你自己引入的 2.0.28 版本

zzutligang

2019-11-19 10:02

@JFinal,感谢回复。我在maven网站上查的,JFinal-undertow 1.9依赖的就是2.0.28,我就直接下载了这个版本。我不是用的maven项目,是普通web工程。另外,问题找到了,是chrome浏览器锅。这个鬼浏览器竟然会把本机上的127ip和物理网卡ip的uri产生的cookies放到一起了,会在同一个域下产生两个JSESSIONID数据,而这两个ID是不同的。触发的原因,是因为我在本机装了一个activeMQ消息服务器,也是需要登录的,只要在浏览器里两个tab页里同时打开我的程序和这个消息服务器的管理页面,并都登录,浏览器就会在一个cookie里生成两个相同的JSESSIONID变量,这就导致我的程序登录后所有通过ajax请求的JSESSIONID的值其实是activeMQ的sessionid,当然后台就查不到对应的session里保存的登录信息了。同样的操作,我用safari,firefox,opera做了实验,都不会出现这个异常状况。chrome现在版本78.0.3904.97,坑死人!就当是给后来有遇到这样问题的人一个提示吧。

JFinal

2019-11-19 11:50

@zzutligang chrome 浏览器引起的这个问题确实坑,解决就好

jfinal undertow 使用的 undertow 版本以 pom.xml 中的为准:
https://gitee.com/jfinal/jfinal-undertow/blob/master/pom.xml

建议先下载首页的 jfinal_demo_for_maven.zip,对这个项目进行一次 mvn clean package , 这样会打包出来一个 lib 文件夹,直接用上这个文件夹下面的 undertow ,这样获得的 undertow 文件版本才是妥当的,不会出问题

jfinal 官网使用 jfinal-undertow 稳定可靠运行一年多了,谁用谁爽

Jieven

2020-03-07 09:14

@zzutligang 本地开发用本地Host域名就会比较靠谱, 也尽量模拟真实效果