使用php保护生成图像

时间:2011-06-14 20:16:48

标签: php image session while-loop

我在这里遇到问题,我认为这里的人可以帮助我。

我有一个生成图片的文件ler.php,以及一段时间内加载图片的文件carregar.php

我需要阻止直接访问ler.php生成的图片,尝试制作类似此会话的系统:

carregar.php

<?
$_session['a'] = 1;
while($a != 50) { echo "<img src='ler.php?imagem=$a'>"; $a++; }
$_session['a'] = 0;
?>

ler.php

<? if($_session['a'] == 1) { //load image } ?>

结果是只加载第一张图片。

我现在尝试使用$_SERVER ["PHP_SELF"],放置ler.php的IF,发生的情况是我通过<img src=''>加载它,并将其标识为carregar.php

谁拥有最佳解决方案? 我已经尝试了$_SESSION的几种方法,但它似乎并没有真正起作用。

3 个答案:

答案 0 :(得分:0)

我可以提出两种方法:

  1. 易于实施,保护性较差:在ler.php中检查$ _SERVER [“HTTP_REFERER”]是否指向“carregar.php”。

  2. 稍微复杂一点:在carregar.php中为您要输出的每个图像生成一个唯一的代码并将其存储在$ _SESSION中。然后将代码作为GET参数传递给ler.php。在ler.php中检查代码是否存在于$ _SESSION对象中,然后生成图像并从$ _SESSION中删除代码。

答案 1 :(得分:0)

我很难确定问题,但您对会话的使用会导致意外结果:

您正在向页面添加50个(我猜...)图像标记,并在添加这些标记后立即将会话变量设置为0.

浏览器只会同时从同一台服务器加载一些文件,所以当脚本完成并加载第一张图片时,浏览器会请求下一张图片,但是因为你已经将会话变量设置为0,所以会失败。

在加载所有图像后可靠地将会话变量设置为0的唯一方法是来自页面的ajax请求,在所有图像完全加载后检查并触发。

答案 2 :(得分:0)

好!我设法解决了一种方法而且没有使用AJAX即兴创作:

ler.php:

<?php
    if(isset($_SERVER["HTTP_REFERER"])) {
    $check2 = (strpos($_SERVER["HTTP_REFERER"], 'carregar.php') > 0) ? true : false;
    if(print_r($check2) != 11) {
// Blank
    }
    } else {          
    if(isset($_SERVER["HTTP_REFERER"]))
    {
// Load Image
    }
    if(!isset($_SERVER["HTTP_REFERER"]))
    {
// Blank
    }
?>

因此,图像只能加载到我的页面中。也许...