问题描述
中午午休正在睡觉,接到产品经理的电话。描述了部署在客户方的一个问题,用户登录系统后过几分钟就自动退出了。当时我就恶心坏了,首先公司采取的是微服务架构,关于登录/用户管理的业务逻辑封装为认证组件。这个问题之前也出现过并且不好排查。之前出现过因为网关或前方面的bug都造成过该问题。其次是因为这个组件因为组织架构变更在名义上已经移交给其他人去负责。当想着产品经理打电话到我这了,本着一事不烦二主的原则,决定排查并解决该问题。
登录的业务逻辑
不讲业务逻辑了~
问题现象
当用户登录等几分钟后刷新页面或点击其他操作会自动退出。
排查思路
首先查看部署的组件版本。然后对应git提交记录查看是否是代码问题。发现使用的比较久的版本(算是稳定版本,经过测试人员测试过的),那么基本排除改代码出现问题的可能。第二步查看组件日志。发现用户登录是有日志输出的。但是当用户强制退出则没有日志记录(删除session)。随后查redis(session信息),发现是有记录的。随后又查看数据库中的session信息。发现了问题。有登录的session记录,但是入库时间比现实时间晚了一天。这就导致cookie的有效时间晚了一天,当cookie消失,在发送请求时前端没有携带cookie,在网关层就会链接用户不在线。导致用户登录后几分钟就会自动退出。 服务器时间不对
如何发现
客户发现。
如何解决
1. 首先检查服务器/数据库的时间
# Linux服务器
[root@www ~]# date
2023年 05月 27日 星期六 09:40:59 CST
# 数据库
select now()
2. 调整服务器/数据库时间
服务器可以通过date指令手动调整时间。也可以使用ntp自动同步系统时间。
数据库的调整时间 自行百度~~。
完事~