Laravel:缓存和经过身份验证的用户

Posted

技术标签:

【中文标题】Laravel:缓存和经过身份验证的用户【英文标题】:Laravel: Cache and authenticated users 【发布时间】:2015-06-21 04:28:35 【问题描述】:

我正在使用 barryvdh 提供的很棒的 laravel-httpcache 包来缓存包含大量事件数据的页面。这对客人来说非常有效,而且速度很快。但是,登录的用户可以将此列表中的任何项目标记为收藏。这些项目应该以某种方式突出显示。由于页面被缓存,因此没有突出显示。有没有办法绕过登录用户的httpcache?或者是否可以为每个用户缓存一个页面版本?

【问题讨论】:

【参考方案1】:

我从未使用过该软件包,但通过查看 documentation,您应该能够在过滤器中添加一个检查:

Route::filter('cache', function($route, $request, $response, $age=60)
    if(Auth::guest())
        $response->setTtl($age);
    
);

【讨论】:

不幸的是,这不起作用...一旦页面被缓存,缓存的(=非个性化)版本将交付给登录的用户。 嗯,是的,这就是缓存的工作原理。一旦浏览器获得缓存特定请求的命令,除非时间结束或您手动使缓存无效,否则它将不会再次缓存。一个简单的解决方法是在登录时使用不同的 URL。此外,只需添加 GET 参数就足够了。这通常使用 CSS 文件等静态资源来“告诉”浏览器内容已更改 (/css/style.css?v=1.2)

以上是关于Laravel:缓存和经过身份验证的用户的主要内容,如果未能解决你的问题,请参考以下文章

仅针对经过身份验证的用户的 Django 缓存

如何使用 Vuejs 和 Laravel 获取当前经过身份验证的用户 ID?

Laravel 中的单元测试:设置当前经过身份验证的用户时出错

如何在 Laravel 和 Vue.js 中使用 jwt-auth 检查用户是不是经过身份验证

使用 Laravel Passport 获取经过身份验证的用户并授予密码

如何使用 API 中间件在 Laravel 中测试 PHPUnit 一个经过身份验证的用户?