【问题标题】:Set Laravel Specific Session Variable to expire after some time将 Laravel 特定会话变量设置为在一段时间后过期
【发布时间】:2019-08-15 22:27:01
【问题描述】:

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

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

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

在缓存中我会这样做

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

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

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

【问题讨论】:

    标签: php laravel session session-variables


    【解决方案1】:

    由于每个用户都是唯一的,您可以命名缓存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,缓存过期时间现在是 ,而不是分钟。

    【讨论】:

    • 不会让我的系统超载以在我的缓存中保留这么多大变量吗?
    • @Sp1deR 这是假设您将同时拥有大量用户。您可以通过json_encode'ing $posts 来确保减少。其次,确保$posts 是一个数组,而不是一个对象/集合。
    • 是的,谢谢!仍然想知道是否有任何更顺畅的方法可以做到这一点,但现在很好,感谢您的帮助
    • @Sp1deR 可能会改变方法。请标记为正确。
    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 2017-10-20
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多