我在这里遇到问题,我认为这里的人可以帮助我。
我有一个生成图片的文件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
的几种方法,但它似乎并没有真正起作用。
答案 0 :(得分:0)
我可以提出两种方法:
易于实施,保护性较差:在ler.php中检查$ _SERVER [“HTTP_REFERER”]是否指向“carregar.php”。
稍微复杂一点:在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
}
?>
因此,图像只能加载到我的页面中。也许...