两个服务部署在不同服务器,两个服务怎么判断是同一个用户?

尤文图斯 发布于 05/29 18:52
阅读 505
收藏 1

两个服务部署在不同服务器,A服务做了登录,同一个域名下,B服务怎么知道是在A服务登录的用户?

方案一:在A服务登录时,把用户id放在session的attribute里,然后B服务取这个session的用户id 

方案二:在A服务登录时,把用户id和session id 建立映射存在数据库中,前端cookie保存session id,访问B服务时,后端通过取cookie中的session id并查数据库,判断用户。

这两个方案可行吗?为什么?有没有更好的方案?

 

加载中
2
明天以后
明天以后
  1. 最简单,但不太合理。用nginx负载均衡,策略使ip hash。这样可能会导致某个服务器压力过大,失去负载均衡意义。还有可能,用户访问过程中,用户的ip变了。
  2. tomcat层的session共享。
  3. web应用层的session共享,如存redis
  4. 使用jwt。

 

推荐3

0
DrakKing
DrakKing
这种酒要用到分布式了啊。不能用tomcat服务器。用redis做分布式缓存。将session存到redis。设置过期时间。每次操作重新设置过期时间。然后两台服务器都从redis去获取信息。
z
zb31721432
回复 @尤文图斯 : 不是
四月与端午
四月与端午
回复 @尤文图斯 : 现在基本都用redis,而且这应该比较主流,而且使用也简单,建议你试下
尤文图斯
回复 @DrakKing : 如果同一个域名下,访问了A服务 有一个session, 再访问B服务,和B服务得到的session是同一个session吗?
DrakKing
DrakKing
一般以session当做key,用户信息当做值。
尤文图斯
你看我写的两个方案可行吗?没用过redis, 请教下如果用redis保存seesion,是保存session id和user id的映射还是保存完整的session?
0
疏影横斜
疏影横斜

1.tomcat支持session复制

2.使用spring-session+redis做session共享

3.重写session

4.iphash

5.cookie

0
夏天飘过的风
夏天飘过的风

如果是利用session,就必须要做session共享。如果是java的,可以看下spring session的做法。也可以利用cookie。另外也可以使用前后端分离的方案,使用JWT等等

0
慕容狗蛋
慕容狗蛋

1. 服务器之间 session 共享,有多种方案,例如 session 存 redis, 数据库,服务器自动同步 session 到内存

2. 可以参考 JWT,token 里自带了登录用户信息

3. CAS 实现单点登录,用户信息放在 cookie 里

4. 使用 Nginx 作为负载均衡,用户信息也是放在 cookie

0
开源中国首席大弟子
开源中国首席大弟子

建议用redis做session共享,操作简单高效

0
改变00自己

session共享,存Redis

0
yak
yak

同一域名用 cookie  写代码加密一下,只要保证多台服务器上的读写代码一致就可以

 
yak
yak
回复 @头号大宝贝 : 其他的都是吹箫,因为齐宣王好这口
头号大宝贝
头号大宝贝
仅此一位正确答案,其他都在吹水。
返回顶部
顶部