不知道大家和前台合作的时候,用户关键信息,比如ID是如何传递的。
有的是放在header头里,有的直接明文参数传递,但是思路不应该是这样的,用户等关键数据都应该存储在服务端,而后每个需要用户信息的接口,都去判断是否登录就OK了。
正常情况下用户登录之后的信息,是保存在session里的,但是这样就会有两个问题:
第一是session有效期是固定的,有可能 用户在操作时,持续玩了很久,再去请求需要用户信息的接口,会发现是未登录状态,也就是session中信息已过期。
第二是,前台在用户登录后,一般会保存一些基本信息在本地,这样进程杀死,再进来,默认还是登录的,但其实请求头里的sessionid已经改变,对应session里是没有这个用户的信息的,就会导致后续很多操作失效。
这时候我们配合前台,做一个最简单的会话持久化处理:
在用户初次请求接口时,前台获取到header头里的sessionid,PHP的叫PHPSESSID,然后保存在本地,之后的所有请求,都把header头里的sessid修改为初次保存的那个。这样服务端就可以认为一直是这个用户在操作,所以就可以在用户登录的时候,把这个sessid和对应的用户信息保存在表中,退出登录再删除就OK了。
而后在必要接口,延长session有效时间,这样最简单的持久化就OK了。
在用户请求时,看session有没有对应用户信息,如果没有就用这个sessid去表里查一下,而后把用户信息存入session,模拟一个登录,这样服务器挂了重启,在操作的用户也能很大程度上减少影响,并且可以适当减轻服务器压力。
image.png
image.png
网友评论