首页 新闻 搜索 专区 学院

不同服务器 Session获取问题

0
悬赏园豆:20 [待解决问题]

一个统一登录的项目。
登录模块部署在了xxx.xxx.xxx.xx的8001端口下
需要对接的项目部署在了xxx.xxx.xxx.yy的8080端口下

在8001项目中,账号验证通过后,生成了一个ticket,存到了session中。
在8080项目中,写了拦截器,拦截请求,判断是否有session,有的话,跳过登录,没有的话,进入登录页。

问题:
在8001模块确认已生成ticket并写入session中

但是在8080模块的拦截器中无法获取session值

不同IP能否处理一下,让session共享

代码羡的主页 代码羡 | 初学一级 | 园豆:110
提问于:2021-06-21 10:45
< >
分享
所有回答(5)
0

8081登录成功之后,你是如何回跳到8080端口的

编程小大白 | 园豆:511 (小虾三级) | 2021-06-21 15:12

去8001端口时,访问链接拼接了返回地址参数,在登录时访问链接 xxx.xxx.xxx.xx:8001/checkLogin?service=http://xxx.xxx.xxx.yy:8080/aaa/bbb,同时还会携带用户名和密码,如果是登录状态,则直接/aaa/bbb对应的页面

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 09:48

@代码羡: 如果是登录状态的话,你是通过redirect方式跳转到对应页面的吗

支持(0) 反对(0) 编程小大白 | 园豆:511 (小虾三级) | 2021-06-22 10:04

@编程小大白: 是的

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 10:07

@代码羡: 使用redirect方式的时候,一般会把令牌拼接到redirect_url后面把,类似redirect_url?ticket=xxx

支持(0) 反对(0) 编程小大白 | 园豆:511 (小虾三级) | 2021-06-22 10:19

@编程小大白: 是的,但是现在比如说有两个系统A、B,都对接了8001登录模块,在A系统上登录了,获取了ticket,也生成了session,A和B的session没有同步的话,那我在B上面,如何能能拿到ticket呢?A、B、登录模块在三台服务器上。

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 11:02

@代码羡: 我们之前的做法是在登录服务器,也就是你们这边的8001模块存储ticket,A或者B发送登录请求时,8001校验有无登录信息,有则redirect到指定页面并携带ticket,无则登录。

支持(0) 反对(0) 编程小大白 | 园豆:511 (小虾三级) | 2021-06-22 11:05

@编程小大白:
我们这边,比如A、B两个系统都是必须登录才能访问的话,在某个浏览器里面,A系统登录成功之后,如果进入B系统的话,这时肯定是不需要再进入登录页的对吧。

也就是说,B发送请求的时候要进行拦截,然后去【登录模块】验证此时的登录状态。
【登录模块】提供能我们的验证方式就是B在访问的时候,携带在A系统登录时生成的ticket。
那这个ticket是【登录模块】写在session中的,B、A、【登录模块】都没在一个服务器上,session没有同步,B也就拿不到ticket,这样B在【登录系统】的验证中,就是一个没有ticket的请求,需要再次进入登录页面。

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 13:35

@代码羡: 如果是你们这种方式的话,那只能按照楼下大佬说的,用redis或其他公用存储媒介存储ticket,然后都可以读取和写入。

支持(0) 反对(0) 编程小大白 | 园豆:511 (小虾三级) | 2021-06-22 13:37

@编程小大白: 好的,感谢

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 14:07
0

用session是解决不了单点登陆问题. 你可以用redis存用户的token信息.然后读取同一个redis就行

南宫懿痕 | 园豆:223 (菜鸟二级) | 2021-06-21 15:59

不过单点登录系统不是我们做的,我们只负责跟他们的登录系统做一个对接,能改的只有 8080项目的内容,哎,实在不行,得让8001的人改了

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 09:49
0

奇怪了,两个不同的站点,session能共享吗? 除非你把session放到数据库里面

不知道风往哪儿吹 | 园豆:1927 (小虾三级) | 2021-06-21 17:11

同一IP下,两个不同的端口时可以共享的,这个昨天查了好久,可以在tomcat的conf文件下,修改context.xml,在Context标签中增加sessionCookieName="mySessionName",sessionCookieName不重复的话,8080是可以拿到8001端口的session的。

然而,现在在两台服务器上

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 09:51
1

按照W3C标准,不同网站之间的session本就不应该共享。最好还是想其他办法吧

龙葛格 | 园豆:778 (小虾三级) | 2021-06-22 11:23

好的,感谢,我去找做登录的人聊一聊吧

支持(0) 反对(0) 代码羡 | 园豆:110 (初学一级) | 2021-06-22 14:07
0

8080想8001发送请求的时候,多进行一步操作,8001回调一下8080的端口,把需要的session值带到8080端口

代码羡 | 园豆:110 (初学一级) | 2021-07-27 17:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册