关于 Laravel 使用 Redis 来存储 Session 的问题
我想使用Redis来代替file或者其他的存储方式来存储我的Session.
所以在.env环境配置文件里面把
CACHE_DRIVER=redis
SESSION_DRIVER=redis
换成了这样。
可是现在的问题是,比如我的MySQL的users的表里面有一条记录,然后用户通过账号密码登录上去,如果我把这条记录删除。刷新页面,用户就自动登出了。可是我并没有清理Redis里面的Session内容啊。这就让我觉得Laravel还是在用Database在检查Session。
关于 LearnKu
你如果是会话机制的设计者,你会怎么设计呢?
@Summer 我的意思是,既然我选择了redis来存储我的session, 他就没必要去数据库了吧。直接找redis对应的session。
我现在这么试下来,它这不是明摆着还是去database query了一遍吗?不是很了解。
session 只是一个
登陆用户的标示,session 里面有用户信息,一般这种设计都会从 session 取到user_id,然后通过user_id去数据库里取用户的详细信息。这个逻辑也算是正常,如果你还能正常登录,那就是 Laravel 的 bug 了。
@Summer 可是我选择的是用Redis来管理我的Session的啊。那用Redis来替换Database的意义何在呢?还是我哪里没弄清楚。
如果他每次都为了获取完整的用户信息去数据库里面找,不是很快就变成瓶颈了。
你应该是还没弄清楚 Session 是什么东西,自己找些文章看下
@Summer 可是我之前的处理方式都是尝试登录。
成功之后返回用户的信息,然后存入Redis,给用户的Cookie里面写入一个token用来识别用户身份。
然后每次用户的请求,根据Cookie里面的token,然后去Redis里面找对应的Key,把信息拿出来,然后做相应的处理。根本不需要每次都去MySQL查询的啊。
我的处理方式有什么问题吗?
首先得搞清楚session的机制。
@mythsumm 看了文档,自己实现了Custom Session Driver. 问题解决了。
我怎么觉得 你不是需要session(不管是file 还是 redis) . 你只是需要一个基于内存的关系数据库而已.
Session 只是保存
用户会话信息,简单来说就是客户端浏览器B访问某域下的网站A的唯一标识这个
Session登录验证Auth并没有直接的关系,你登不登录,单纯从会话信息来看是无法判断的,只是我们通常制定标准,假定使用会话信息中某个特定字符如,“is_login” 保存登录状态.file,redis,db 这些只是存储会话信息的方式不同,但它们都要满足 key => value 的结构