Nginx+Tomcat出现session复用现象

现象:A用户登陆系统后将信息存入session,其他个别用户通过getSessionAttr时会取到A用户的信息。

环境:Nginx作为反向代理,Tomcat作为应用服务器,部分配置如下。

nginx部分配置:
    upstream xx.yy.cn {
        server 127.0.0.1:8081;
    }

    server {
        listen       443 ssl;
        //其它有关ssl配置在这里省略
        
        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_redirect off;
            proxy_connect_timeout      240;
            proxy_send_timeout         240;
            proxy_read_timeout         240;
            proxy_pass http://xx.yy.cn;
            add_header From xx.yy.cn;
            proxy_cookie_path /var/ /;
            proxy_set_header Cookie $http_cookie;
        }
    }

尝试过只反向一台tomcat、一台tomcat只保留一个应用、在nginx中配置cookie路径等等,但上述现象还是偶有出现。

问题:1、这异常与JFinal无关,但记得波总提及JFinal官网也是这服务器搭配,所以想请教下是否有哪些地方的配置需要注意;2、把session存入redis的方式能否解决;3、不需要session但又能知道请求是同一会话的应用如何设计,每个请求带参?cookie?希望能提供些思路。多谢!

评论区

JFinal

2018-06-28 10:29

jfinal 官网不是这么配置的,因为 jfinal.com 根本就不使用 session,看一下手头的 jfinal club 项目,里面是用数据库实现的 session 共享

弃用 tomcat 或者叫 servlet 规范中的 session ,也就是弃用 getSessionAttr、setSessionAttr、 getSession() 等一切与 session 有关的方法。 然后参考 club 实现一个 session 机制,这个 session 机制可以是保存数据库,也可以是保存到 redis,只要是共享的一个地方存起来就可以了

不用 servlet 中的 session , 由于 http 是无状态的,通常是使用 cookie 或者 token + 签名的方式,一般使用 cookie + https 既方便又安全

热门反馈

扫码入社