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