为了账号安全,请及时绑定邮箱和手机立即绑定

改变用户session信息

改变用户session信息

PHP
Smart猫小萌 2019-03-11 00:40:11
做一个网站系统,用户每一次请求都要检查登录信息,而这些信息一般是保存在session或者cookie中,所以一般会判断session或者cookie中是否有数据来确定是否登录了。 遇到一种情况,就是在后台管理用户的时候,例如把某一个用户删除了,但是该用户只要还保留session数据的话还是能操作的。 针对这种情况,我想到两种办法: 1:每一次检查用户是否登录的时候要实时的查询表数据,不单单是检查session。 2:用数据库来保存用户的cookieId,当用户状态改变时候,修改对应的session数据。 不知道还有没有其他更好的办法来解决。欢迎交流,一起学习。
查看完整描述

8 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

先来复习一下session的基本原理:

a.生成过程:

用户在客户端输入用户名密登录 -> 服务器验证用户名密码正确 -> 服务器随机生成一个token(一般叫session_id) -> 服务端以session_id为主键(或key),绑定session数据(最基本就是uid,有时会加上基本的用户profile数据) -> 将session_id返回给客户端(一般是cookie)

b.使用:

 客户端带session_id访问(一般是cookie) -> 服务端根椐session_id查询session,如有,则认证成功,继续根椐session的内容(如uid)获取业务数据。 
  

再回到你的问题,其实你的思路基本是对的:

  1. 用户访问时,先查询session,如果已登录,再查uid是否存在 ,uid存在才认证成功。

    如果担心性能问题,可把uid直接用本地内存或memcache等缓存起来(删除用户时同时清除缓存,缓存丢了就重新登录)

  2. 保存session时,建立与uid的映射, 比如:
    如果session是存在关系数据库,那就 sid,session,将用户id作为session的值,那样,删除用户时就可以删除该用户的session
    如果session存在文件或者redis之类, 可以在生成session时同时建立反向映射关系保存,目的也是当后台删除用户时可以找到对应用户的session来删除
查看完整回答
反对 回复 2019-03-18
?
哔哔one

TA贡献1854条经验 获得超8个赞

如果每次请求,频繁查询数据库并不理想。
常用过一个小技巧就是,写个定时ajax请求,如每隔5分钟检查一次。这种方法简单。
还有一种方法就是使用socket实现,如单点登陆原理一样实现

查看完整回答
反对 回复 2019-03-18
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

简单说一下我们的设计思路吧。我这边是每次请求,都会重新生成一个新的sessionId,返回给前端,前端将sessionId设置到header,每次请求将sessionId携带传递给服务端,服务端将获取sessionId进行对比,前端一般sessionId存储到localstorage或cookie中,服务端将sessionId一般存储到数据库或者缓存

查看完整回答
反对 回复 2019-03-18
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

session存储到redis,删除用户时找session数据中uid,有则删除key

查看完整回答
反对 回复 2019-03-18
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

删用户的时候把对应用户的session删除。

查看完整回答
反对 回复 2019-03-18
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

自己想到一个方法,不知道可行不。欢迎交流。
就是保存的session文件名都是有sessionID的,那么只要保存好sessionID,直接使用unlink去删除那个文件,可否?

查看完整回答
反对 回复 2019-03-18
  • 8 回答
  • 0 关注
  • 851 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信