关于 Laravel 使用 Redis 来存储 Session 的问题

我想使用Redis来代替file或者其他的存储方式来存储我的Session.
所以在.env环境配置文件里面把

CACHE_DRIVER=redis
SESSION_DRIVER=redis

换成了这样。
可是现在的问题是,比如我的MySQLusers的表里面有一条记录,然后用户通过账号密码登录上去,如果我把这条记录删除。刷新页面,用户就自动登出了。可是我并没有清理Redis里面的Session内容啊。这就让我觉得Laravel还是在用Database在检查Session

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10
Summer

你如果是会话机制的设计者,你会怎么设计呢?

7年前 评论

@Summer 我的意思是,既然我选择了redis来存储我的session, 他就没必要去数据库了吧。直接找redis对应的session。
我现在这么试下来,它这不是明摆着还是去database query了一遍吗?不是很了解。

7年前 评论
Summer

session 只是一个 登陆用户 的标示,session 里面有用户信息,一般这种设计都会从 session 取到 user_id,然后通过 user_id 去数据库里取用户的详细信息。

如果 user_id 在数据库里不存在,也就代表这是 「无效的 session」,直接清理掉。

这个逻辑也算是正常,如果你还能正常登录,那就是 Laravel 的 bug 了。

7年前 评论

@Summer 可是我选择的是用Redis来管理我的Session的啊。那用Redis来替换Database的意义何在呢?还是我哪里没弄清楚。
如果他每次都为了获取完整的用户信息去数据库里面找,不是很快就变成瓶颈了。

7年前 评论
Summer

你应该是还没弄清楚 Session 是什么东西,自己找些文章看下

7年前 评论

@Summer 可是我之前的处理方式都是尝试登录。
成功之后返回用户的信息,然后存入Redis,给用户的Cookie里面写入一个token用来识别用户身份。
然后每次用户的请求,根据Cookie里面的token,然后去Redis里面找对应的Key,把信息拿出来,然后做相应的处理。根本不需要每次都去MySQL查询的啊。
我的处理方式有什么问题吗?

7年前 评论

首先得搞清楚session的机制。

7年前 评论

@mythsumm 看了文档,自己实现了Custom Session Driver. 问题解决了。

7年前 评论

我怎么觉得 你不是需要session(不管是file 还是 redis) . 你只是需要一个基于内存的关系数据库而已.

7年前 评论
Sparkfly

Session 只是保存用户会话信息,简单来说就是客户端浏览器B访问某域下的网站A的唯一标识

这个Session登录验证 Auth 并没有直接的关系,你登不登录,单纯从会话信息来看是无法判断的,只是我们通常制定标准,假定使用会话信息中某个特定字符如,“is_login” 保存登录状态.

file,redis,db 这些只是存储会话信息的方式不同,但它们都要满足 key => value 的结构

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!