重定向页面w / sessions

时间:2017-06-09 08:52:00

标签: php session redirect

我有一个用户从PayPal购买文件后被定向到的PHP文件。它开始一个会话:

<html>
//Thank you message
</html>
<?php
    session_start();
    $_SESSION["token"] = uniqid();
    file_put_contents("token.txt", $_SESSION["token"]);
    include("purchased.php");
?>

该PHP文件应重定向到此PHP文件以开始下载该文件:

<?php
    if(!isset($_SESSION["token"])){$allowed = false;}
    else{
        $allowed = true;
        $token1 = $_SESSION["token"];
        $token2 = file_get_contents("token.txt");

        if($token1 == $token2)
        {
            $file="song.mp3";

            if (file_exists($file)) {
            header('Content-Description: File Transfer');
            header('Content-Type: audio/mpeg');
            header('Content-Disposition: attachment; filename='.basename($file));
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Length: ' . filesize($file));
            ob_clean();
            flush();
            readfile($file);
            exit;
            }
        }
    }       
    session_unset();
?>

但是,如果我将URL复制并粘贴到第一个文件,我的下载会自动启动(第二个文件在第一个文件之后很快就会运行),因为我无法找到编写第一个PHP文件的最佳方法。我知道我做错了什么。帮助

2 个答案:

答案 0 :(得分:2)

不幸的是,对于客户端事件,您需要在内容中包含文件路径。但是你可以做的一件事就是使用AJAX,如果你发送了获取文件路径的请求,请说:

getContent("path.php", function (res) {
  // res will have the file path, say, http://file.php.
  window.location.href = res;
});
  

注意: getContent - AJAX的伪代码获取类似于jQuery&#39; $.get()实现的请求。

这为您提供了更好的隐藏方式。不过,不多,但有点好。在下载之前,您必须使用Sessions或Cookies进行服务器端验证,这使其成为正确的方法!

使用简单的用户管理,当用户登录时,每个页面中都会有session_start(),并且会话将被设置。在下载页面中,您可以执行以下操作:

<?php
    session_start();
    if (!isset($_SESSION[user])) {
      die("Not Authorised!");
    }
    // Rest of the download code.
?>

对于简单的用户注册,您可以按照我的教程Making an Affiliate Registration with Hierarchy进行操作。

答案 1 :(得分:-1)

您应该使用会话来做到这一点。创建会话,当用户购买曲目时,向会话添加令牌。然后file.php检查是否存在有效令牌,如果有,则为文件提供服务。

所以它的工作方式与此类似:

用户购买文件后(您可能会得到一些您正在使用的付款方式的结果,如果付款成功与否),您将在用户重定向到的PHP文件中生成一个令牌,还会显示“谢谢”消息。 首先,您必须在所述文件中启动会话:

session_start();

您可以生成一个简单的令牌,例如:

$token = uniqid();

令牌看起来有点像这样:4b3403665fea6

之后,您必须将令牌保存在服务器上(例如使用MySQL),然后将其设置为会话:

$_SESSION["token"] = $token;

然后在file.php中,您必须像以前一样在顶部开始会话:

session_start();

然后检查会话中是否有令牌。如果没有,请设置一些临时变量,我们将使用它来检查是否允许下载,为false。如果是,则从会话中获取令牌:

if(!isset($_SESSION["token"])) {
    $allowed = false;
} else {
    $allowed = true;
    $token = $_SESSION["token"];
}

之后,您只需将$token中的字符串与之前在服务器上保存的令牌进行比较。如果服务器上有与该字符串匹配的令牌,请将$allowed设置为true。然后,如果$allowed为真,则只执行其余代码。