php - Laravel Redis session 驱动程序 - Redis session 不一致

标签 php laravel redis

我正在使用 Laravel 5.7。 Redis 被设置为我的缓存和 session 驱动程序。

在我的 Controller 中,如果我使用 $request->session()->put() 或 Session::put() 写入我的 session ,它会在我为 session ID 打印缓存时显示:

print_r(unserialize(Cache::get(Session::getId())));

请注意,我以这种方式输出 session 数据的主要目标是访问不是我的事件 session 的 session 。

但是,如果我在我的域中使用这些方法中的任何一种写入我的 session ,它们将不会显示在缓存打印中,但会显示(连同确实显示在缓存打印中的所有其他内容) ) 如果我使用:

print_r(Session::all());

我对发生的事情感到困惑。当通过 redis cli 访问数据时,我验证了我所说的也是正确的。显然,如果我在域中写入 session ,它会以某种方式存储在其他地方吗?想法?

最佳答案

您的缓存和 session 是两个完全不同的实体,即使它们可以使用相同的驱动程序。

session 用于维护与用户的关系。查看PHP session documentation了解更多详情。

缓存是您存储和查找经常访问的数据的地方,而不是访问昂贵的代码或数据库。它是短暂的,永远不能保证保存任何数据。

为什么不直接使用 Session::get('whatever')


看到您的编辑后:

Note, my primary goal in outputting session data this way is to access sessions that are not my active session.

您应该通过比缓存更持久的存储机制来存储该数据。正如我之前提到的,缓存是短暂的。您可以使用 redis,因为它是一个键值存储,而不是像 memcached 这样的真正缓存。直接使用它:

Redis::get('user:profile:'.$id);

关于php - Laravel Redis session 驱动程序 - Redis session 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731854/

相关文章:

php - 从数组中删除项目的所有实例

laravel - 如何解决Facade\Ignition\Http\Middleware\IgnitionEnabled?

laravel-5 - Laravel 5.3 和 Redis (predis) - 自动增量散列和删除散列 `row`

laravel - 如何使用 Craft 3 CMS 网站 "connect"Laravel 项目

php - 如何仅向某些人显示 laravel 调试栏?

ajax - Symfony 表单返回 CSRF token 对于 AJAX 请求无效

redis - StackExchange Redis 的分区键空间

javascript - JQuery 未使用 AJAX 检测动态添加的 anchor 标记

php - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES) using MAMP server

php - 代码点火器 : Error in ORDER BY CASE query