仅在php中限制登录用户对图像文件的访问

仅在php中限制登录用户对图像文件的访问,php,Php,假设用户A在他/她的Facebook帐户中有一些图片,登录后可以查看这些图片 如果用户A注销并尝试其中一个图像的url,则会显示“访问限制”类型的消息 想象一下用PHP构建的社交网站 如何实现这种控制,以便像Facebook一样,在不登录网站的情况下无法查看任何图像? 将所有图像移动到无法从web访问的文件夹中 实现一个php脚本(image.php),该脚本检查用户是否登录并接受图像名称作为输入(例如image.php?name=flower.png) 如果用户已登录,请发送正确的内容类型im

假设用户A在他/她的Facebook帐户中有一些图片,登录后可以查看这些图片

如果用户A注销并尝试其中一个图像的url,则会显示“访问限制”类型的消息

想象一下用PHP构建的社交网站

如何实现这种控制,以便像Facebook一样,在不登录网站的情况下无法查看任何图像?

  • 将所有图像移动到无法从web访问的文件夹中
  • 实现一个php脚本(image.php),该脚本检查用户是否登录并接受图像名称作为输入(例如image.php?name=flower.png)
  • 如果用户已登录,请发送正确的内容类型image
    header()
    (例如image/png)
  • 从磁盘读取文件并使用
    readfile()
    将其发送给用户
  • 通过发送诸如/images.php?name=/etc/hosts之类的内容,确保人们无法访问images dir之外的文件(最好接受一个图像ID,而不是文件名或文件名的散列,您可以使用
    md5()
    生成散列,但记住根据图像文件的md5散列来命名图像文件,在这种情况下,您总是只在图像目录中查找图像文件)
  • 如果用户未登录,您可以发送一个自定义图像,显示“请登录”或终止脚本

假设图像url为mysite.com/images/img.jpg。如果点击此url,将在何时执行脚本image.php/图像的
src
属性应为:mysite.com/image.php?name=img.jpg,因此脚本image.php将控制对图像文件的访问,并仅在请求用户登录时显示图像文件。如果他/她没有登录,脚本应该终止执行,否则,脚本应该
readfile('path/images/img.jpg')
,以便将图像发送给用户(也不要忘记使用
header()
设置正确的内容类型。如果url为mysite.com/images/img.jpg,它将尝试读取哪个src属性?答案中的第一个链接()不工作如果您的url直接指定了一个.jpg文件,并且图像文件可以在internet上直接访问,那么就没有简单的方法确保只有经过身份验证的用户才能看到它,这就是为什么所有链接都应该指向php脚本而不是图像本身的原因。该链接是: