首页 > 解决方案 > 将 Laravel 特定会话变量设置为在一段时间后过期

问题描述

我在我网站上的统计页面上工作,我需要将一般会话变量保持在正常持续时间(例如:120 分钟)但我也想存储我的一些变量,所以我不必在每个页面重新加载时执行 8 个 SQL 查询例如,我想保存过去 30 天中每一天的用户帖子计数,但它经常变化,所以只想保存 10 分钟我怎样才能只在 10 分钟后删除会话中的特定变量但保留另一个还活着?

我考虑过保存上次刷新时间和每次重新加载检查是否为 10 分钟

Session::put('lastRefresh',  Carbon::now()->timestamp);

在缓存中我会这样做

Cache::put('posts',  $posts, 10);

但它对每个用户都是独一无二的,所以我不能有时它只是一个大数组(90 天 90 项)所以我不能使用 cookie:P

只是不知道这是否是最好或最有效的方法

标签: phplaravelsessionsession-variables

解决方案


由于它对每个用户都是唯一的,因此您可以命名缓存key以识别用户:

Cache::put('user_' . auth()->user()->id . '_posts',  $posts, 10);

or

cache(['user_' . auth()->user()->id . '_posts' => $posts], 10);

然后你可以使用检索:

Cache::get('user_' . auth()->user()->id . '_posts');

or

cache('user_' . auth()->user()->id . '_posts');

注意:如果使用 laravel 5.8,缓存过期时间现在以为单位,而不是分钟。


推荐阅读