现象: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
弃用 tomcat 或者叫 servlet 规范中的 session ,也就是弃用 getSessionAttr、setSessionAttr、 getSession() 等一切与 session 有关的方法。 然后参考 club 实现一个 session 机制,这个 session 机制可以是保存数据库,也可以是保存到 redis,只要是共享的一个地方存起来就可以了
不用 servlet 中的 session , 由于 http 是无状态的,通常是使用 cookie 或者 token + 签名的方式,一般使用 cookie + https 既方便又安全