关于jfianl框架里,Session的问题

在目前负责的开发功能中,遇到一个session赋值后删除不了的问题,以下是图文配合说一下具体问题

image.png

我在点击登录模块的时候,给isWm赋值为true

image.png

然后我不登录,点叉号关掉这个模块

image.png

image.png

点叉号,会触发这个两个方法,去删掉isWm这个session

image.png

然后点这个登录模块

image.png

image.png

我在这又删了一遍

结果是isWm这个session值还存在,没删掉


评论区

JFinal

2019-01-25 17:16

可能是流程问题,单步调试一下,看流程走对没有,有时候看似发了请求,但可能是路由之类的不对,请求没到达后端。 尤其是 ajax 请求

再一个,用的什么容器? 是 tomcat 还是 undertow

177自律

2019-01-25 17:55

@JFinal 容器是tomcat
下面这段代码是拦截器中的,isWm是判断显示哪个登录窗口
if(isWm){
c.setSessionAttr("isWm",true);
c.redirect(redirectUriMG);
}else{
c.removeSessionAttr("isWm");
c.redirect(redirectUri);
}
登录界面点击关闭时会触发下面的方法
public void removeSession(){
removeSessionAttr("isWm");
renderText(new SuccessResult<>(SysMsg.OsMsg.get("OK")).out());
}
我没有在其他方法里写过isWm的session赋值,但就是移除不掉

JFinal

2019-01-25 18:20

@177自律 刚刚测试了一下,是没有问题的,你也试试我的测试方法:
1: 添加三个用于测试的 action
public void set() {
setSessionAttr("key", 123);
renderText("设置 session");
}

public void get() {
Object value = getSessionAttr("key");
renderText("获取 key = " + value);
}

public void remove() {
removeSessionAttr("key");
renderText("移除 session");
}

2:然后先请求一次 set ,再请求一次 get,再请求一次 remove,最后再请求一次 get,会发现工作完全正常

JFinal

2019-01-25 18:21

@177自律 如果上面的办法测试出来仍然有问题,那一定是当前你用的 tomcat 有 bug, 建议你换一下 tomcat 版本

177自律

2019-04-19 10:14

@JFinal 我们换了一个开发方案,本来也是作为两个系统分开的,最初想着用多源数据库,但是两个系统代码穿插有点乱也不太合理,所以跟您提的这个问题也就不存在了,不过很感谢您的帮助!

热门反馈

扫码入社