php - 防止浏览器缓存图片

标签 php caching laravel-5 meta php-5.6

为了实现未经身份验证的用户无法仅通过猜测 URL(例如 http://www.test.com/images/123.jpg)来查看图像,我将所有图像存储在公共(public)目录之外,并提供一个接受图片唯一 ID 的 URL 和检查用户是否通过身份验证:

// Laravel code behind http://www.test.com/image/5
public function getimage($uid) {

    if(Auth::check()) {

        $filename = Picture::findorfail($uid)->filename; // e. g. '123.jpg'
        return response()->download(storage_path('images/' . $filename), null, [], null);

    } else {

        return response()->download('images/no_access.jpg', null, [], null);

    }

}

因此,经过身份验证的用户会得到图像“123.jpg”,而未经身份验证的用户会得到图像“no_access.jpg”,它只是白色背景上的红色文本“无权访问”。

一切正常,只要我在注销后手动硬清除浏览器(在我的情况下是 Chrome)的缓存。

但是如果

  • 我通过 http://www.test.com/image/5 登录并访问图像然后我得到图像“123.jpg”(正确到这里)
  • 然后注销并调用http://www.test.com/image/5再一次,我应该得到“no_access.jpg”,但由于浏览器缓存,我得到 protected 图像“123.jpg”(缓存覆盖授权检查)

我已经试过了 <meta http-equiv="expires" content="0">但没有任何成功。 Agian,如果我硬清除缓存,一切都是完美的 - 但普通用户不会那样做。

如何告诉浏览器不要缓存?

提前致谢!

最佳答案

尝试在 url 的末尾放置一个随机变量

http://www.test.com/images/123.jpg?{{rand()}}

关于php - 防止浏览器缓存图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39398119/

相关文章:

php - 请求的资源/在此服务器上找不到 PHP

php - 在 Laravel 中为不同客户模式创建关系数据库模型的最佳方法

apache - Basic Auth 背后的 HTML5 list 缓存?

php - 使用 unixOdbc 的 SELECT 之一失败 - SQLSTATE [24000] : Invalid cursor state

ruby - 通过在 Ruby on Rails 5 中配置 HTTP 头来进行静态资源缓存

php - 具有 APC 缓存的 key 组

laravel - 在 Laravel 5.4 中混合/版本图像?

php - 没有 VM 重启,laravel 5.1 看不到作业文件的更改

php - 使用查询生成器构建动态 Laravel DB 查询

php - YouTube搜索API-缺少某些文件