jfinal-undertow Session冲突如何解决

不同jfinal-undertow项目部署在同一台服务器上,session产生冲突如何处理,看浏览器里有undertow生成的JSESSIONID在哪里能修改

评论区

JFinal

2020-03-13 21:49

部署在同一台服务器上不会造成 session 冲突,因为 session 是与域名/ip、端口绑定的,你不同的多个 jfinal undertow 项目同时运行时的 session 所对应的域名/ip、端口肯定是不同的

浏览器中的 jsessionid 一般不用自己手动改,使用 controller 中的 setCookie 方法操作就可以

当然浏览器中的 session 是可以鼠标右键进行删除的

zlsj80

2020-03-13 22:20

@JFinal 事实就是真冲突了,同一个浏览器一个项目登录了,再登另一个项目,再去访问前面那个项目就退出要重新登录,接着访问后面这个session也没了也要重新登录。是不是两个项目都叫jsessionid相同引起的,想把这个jsessionid改成其他名称,就像jfinal官网哪样叫“jfinalId”或者其他什么不同名称

zzutligang

2020-03-14 04:42

我之前也提过这个问题,不知道是咋了,很奇怪,你升级一下chrome浏览器或则换其他浏览器试试,验证一下,再继续反馈。或则你访问的时候,一个用localhost,一个用物理ip访问试试。

JFinal

2020-03-15 16:42

@zlsj80 可能是浏览器的问题, 按一下 F12 , 在浏览器开发者工具中将所有 cookie 删除

zlsj80

2020-03-15 20:12

@JFinal 都删过了,还是一样。后来发现必须要配置undertow的上下文,不能用默认"/",改成"/xxx"这样,改完访问项目也由原来"http://localhost:11000/login",变成"http://localhist:11000/xxx/login",浏览器中jsessionid的path也会同时变成"/xxx",只有这样浏览器同时访问两个不同项目才不至于session冲突,所以我想请教波总这个名为jsessionid的sessionCookie要这么改动?

JFinal

2020-03-15 20:35

@zlsj80 改一下 sessionid 的值,让不同的项目拥有不同的 id 值就不会有问题了

例如本站 jfinal.com 用于登录的 session 的 name 为 jfinalId

zlsj80

2020-03-15 23:00

@JFinal 波总,要怎么改,能贴下代码吗?是改session.setAttribute这个吗,我改了也不好使,没改变还是叫jsessionid

JFinal

2020-03-15 23:24

@zlsj80 jfinal.com 官网采用的办法是:不使用 getSession(...) setSessionAttr(...) 这类 API。 而是使用 setCookie("jfinalId", sessionId的值) 这种方式来保存用户登录后的 sessionId 值

如果你用到 tomcat 这类容器,也是有办法配置这个值的,但这种配置不灵活,要在你的项目中自主控制才是最方便的

akak

2021-02-04 13:46

可以设置的,
UndertowServer undertowServer = UndertowServer.create(AppConfig.class).configWeb(builder -> {
.........
// 设置SESSIONID
ServletSessionConfig servletSessionConfig = new ServletSessionConfig();
servletSessionConfig.setMaxAge(3600);
servletSessionConfig.setName("TEST-SESSIONID");
builder.getDeploymentInfo().setServletSessionConfig(servletSessionConfig);
});

zlsj80

2021-02-04 17:19