Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel Redis会话驱动程序-Redis会话不一致_Php_Laravel_Redis - Fatal编程技术网

Php Laravel Redis会话驱动程序-Redis会话不一致

Php Laravel Redis会话驱动程序-Redis会话不一致,php,laravel,redis,Php,Laravel,Redis,我用的是拉威尔5.7。Redis被设置为我的缓存和会话驱动程序 在我的控制器中,如果我使用$request->session()->put()或session::put()写入会话,它将在我打印会话id的缓存时显示: print\r(非序列化(Cache::get(Session::getId())) 注意,我以这种方式输出会话数据的主要目标是访问非活动会话的会话 但是,如果我在域中使用以下任一方法写入会话,它们将不会显示在缓存打印中,但会显示(以及缓存打印中显示的所有其他内容),如果我使用:

我用的是拉威尔5.7。Redis被设置为我的缓存和会话驱动程序

在我的控制器中,如果我使用$request->session()->put()或session::put()写入会话,它将在我打印会话id的缓存时显示:

print\r(非序列化(Cache::get(Session::getId()))

注意,我以这种方式输出会话数据的主要目标是访问非活动会话的会话

但是,如果我在域中使用以下任一方法写入会话,它们将不会显示在缓存打印中,但会显示(以及缓存打印中显示的所有其他内容),如果我使用:

打印(Session::all())


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

缓存和会话是两个完全不同的实体,尽管它们可以使用相同的驱动程序

会话用于维护与用户的关系。有关更多详细信息,请参阅

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

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


查看您的编辑后:

注意,我以这种方式输出会话数据的主要目标是访问非活动会话的会话

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

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

你说的都是真的。然而,我的案例的理由是跟踪用户在多个设备上的会话,并让我自己能够一次将它们全部销毁。我计划在缓存中而不是数据库中构建它。当缓存已满时会发生什么?它开始销毁数据。最好用适当的工具做适当的工作。即使考虑到你的论点,我仍然对我的问题感到恼火。为什么它在控制器和域中的行为会有所不同?我想我还是想知道这两种方法中的哪一种。它的行为并没有那么不同,而是调用了不同的代码。如果您真的想知道不同的代码路径,您应该使用
xdebug
并逐步执行应用程序。