HTTP_REFERER未保存在会话中

问题描述 投票:0回答:3

我知道HTTP_REFERER可以被欺骗,但是它可以按照我们现在想要的方式完美地完成工作。除了无法将第一个引荐来源网址保存在会话中之外,因此可以从domain.com进行输入,但是由于HTTP_REFERER更改为我们自己的域,因此无法进入另一页面。下面是我的代码,希望有人可以帮助我。

<?php
// Start the session
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
?>

<?php
// Getting referer and saving
$server = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$referer = parse_url($server);
$refererhost = isset($referer['host']) ? $referer['host'] : '';
$_SESSION['originalref'] = $refererhost;
?>

<?php if ($_SESSION['originalref'] == 'domain.com'): ?>

<!doctype html>
<html>
    <head>
    </head>
    <body>
        <p>Allowed.</p>
    </body>
</html>

<?php else: ?>

<!doctype html>
<html>
    <head>
    </head>
    <body>
        <p>Not allowed. Debug: <?= $_SESSION['originalref'] ?></p>
    </body>
</html>

<?php endif; ?>

编辑:我使语句中的HTML输出更简单,通常将加载完整的站点,这是根模板。

php session http-referer
3个回答
1
投票

解决了它,因为@ 04FS为我指明了正确的方向,也@davidev感谢您的宝贵时间。解决方案是检查会话是否已设置,否则它将被每个页面覆盖,因此我添加了以下内容:


0
投票

您可以使用$ _SERVER ['SERVER_NAME']代替$ _SERVER ['HTTP_REFERER']来获取确切的域。


0
投票

我在自己的服务器上尝试了您的代码。我正在从HTML文件设置引荐来源网址并调用php文件。

© www.soinside.com 2019 - 2024. All rights reserved.