我正在创建一个您必须登录才能访问的图库网站。该站点将使用会话来跟踪用户名和密码。登录用户将能够搜索图像并查看结果。据推测,这意味着我将把图像放在网页目录中。如何让未登录的人员无法直接浏览此目录中的图像?

这是基于PHP的,带有MySQL。

有帮助吗?

解决方案

检查引荐来源标头,并要求它来自您的网站。 您还可以检查cookie是否已发送给您(他们已登录)。

然而,最好的办法是让PHP从网站目录外的位置获取图像。

另外,查看注释字符串:使用mod_rewrite可以直接从apache执行所有操作。

其他提示

将图片放在无法通过直接网址访问的文件夹中,让程序直接提供图像

请勿将图像放在可浏览的目录中。更好的是,将它们存储在您的webroot之外。在验证并验证用户之后,放置某种自定义处理程序,该处理程序将加载所请求的图像并将其发送回用户。这也会阻止图像的热链接。

将图像放在网站外的文件夹中,然后使用代理页将图像发送到浏览器。在img标记中创建一个用作url的页面,例如:

getimage.php?ID = 8783475

在页面中,您检查用户是否已登录,并根据参数确定要发送的图像。将页面的内容类型设置为与图像匹配的类型,例如“image / jpeg”,读取图像文件并直接发送到响应流。

如果您的图片不是太大,有一种非常聪明的方法可以保护他们免受未经授权的访问。 您可以使用与Outlook Express附件编码相同的base64 econding,并将代码放在使用SESSION对象的ASP页面中。有关ASP的更多信息,请参阅ASP指南。 当用户访问该页面时,asp代码检查用户是否被验证。如果他不是脚本中断页面代码,则不可视化图像。 如果用户通过身份验证,脚本将加载整个页面,base64将重建为可见图像。 这里的诀窍是你没有一个带有普通图像的目录,但是图像是在页面html中编码的,所以它是由脚本动态重建的。 由于您在目录中没有图像,因此没有人可以尝试将浏览器直接指向它们,因为它根本就不存在。 您可以使用此站点对图像进行编码:

http://www.motobit.com/util/base64-decoder- encoder.asp

然后你必须“打电话”使用此标记的html代码中的图像:

img src =" data:image / gif; base64,.................................. ............(这里你放置从上面的网站获得的代码)...............

你已经完成了!如果用户未登录,则无法访问您的图像。

不要让人们直接访问您的图片目录。

让您的图片库软件将图片转发给用户。检查所需的凭据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top