正如标题所说,如果访问者不是来自特定 URL,我想阻止访问者查看页面内容。我怎样才能做到这一点?我在 Nginx 上有 PHP。使用 PHP 或 Nginx 会更好吗?
我读到 usingHTTP_REFERER
不是最好的主意,因为它对浏览器不是强制性的……你会怎么做(代码示例)?
正如标题所说,如果访问者不是来自特定 URL,我想阻止访问者查看页面内容。我怎样才能做到这一点?我在 Nginx 上有 PHP。使用 PHP 或 Nginx 会更好吗?
我读到 usingHTTP_REFERER
不是最好的主意,因为它对浏览器不是强制性的……你会怎么做(代码示例)?
可能并不完美,但我会在初始页面上设置一个 $_SESSION,然后在链接页面上检查并删除它。
$_SESSION['allow'] = 'yes';
然后在下一页
if(isset($_SESSION['allow']) && $_SESSION['allow'] == 'yes') {
$_SESSION['allow'] = 'now viewing';
}
或类似的东西....
最防弹的解决方案是传递一个 _GET 参数,这个参数并不容易从一页猜测到下一页,a-la 唯一标记。
然而,要正确实现它需要付出巨大的努力,因为它不是最简单的解决方案,而且到目前为止也不是最简单的实现。
按照复杂性的顺序,最简单的在顶部,您的替代方案是:
最后一个解决方案详细
您的初始页面生成一次性字符串,并将其附加到每个链接。然后检查此字符串是否与数据库/平面文件中的条目匹配,如果是,则允许访问。如果没有,您拒绝访问。然后,您使令牌无效,因此用户必须再次浏览该页面。
限制对页面访问的唯一方法是使用某人的凭据,没有可靠的方法来检测用户来自哪里,因为这可能会被欺骗。
因此,只有当用户刚刚来自页面 A 时,才允许访问页面 B(除非您通过HTTP_REFERER
您还可以在页面 A 上设置 cookie(或会话变量)而不显示页面 B,除非用户设置了 cookie(会话变量),但这并不要求用户直接从页面 A 转到页面 B
一种简单的方法是在第一页设置一个一次性会话变量,然后在第二页读取该变量。
例如,第 1 页:
$_SESSION['viewed_page1'] = true;
第2页:
if(!$_SESSION['viewed_page1']){
echo 'You need to visit page 1 first!';
}
.
您可以使用会话变量并从一个页面传递特定的“密钥”,并在下一页上要求它以显示它。
你可以在这里找到关于会话的信息