php - 限制没有变量的页面,仅在来自页面或站点时打开
问题描述
page-one.php 代码
<?php
//page-one.php
session_start();
$_SESSION['page_one'] = time();
?>
hello this is page 1 go to page 2
<a href="www.domain.com/page-two.php">Page 2</a>
page-two.php 代码
<?php
//page-two.php
session_start();
//Check to see if session variable exists.
if(!isset($_SESSION['page_one'])){
//Does not exist. Redirect user back to page-one.php
header('Location: 404.php');
exit;
} ?>
this is page 2
工作完美,但我有两个问题:
如果我删除第一页 bcz 我想通过单击链接向访问第 2 页的所有访问者显示第 2 页怎么办
或者如果用户通过 google.com 进入第二页怎么办,在这种情况下,第二页将如何传递 page_one 变量
解决方案
这没有多大意义,但对于您的具体问题:
if(!isset($_SESSION['page_one']) &&
strpos($_SERVER['HTTP_REFERER'], 'google') === false &&
strpos($_SERVER['HTTP_X_FORWARDED_FOR'], 'google') === false &&
file_exists('page-one.php')
{
header('Location: 404.php');
exit;
}
- 检查会话变量是否未设置
- 检查是否
HTTP_REFERER
不是google
- 检查是否
HTTP_X_FORWARDED_FOR
不是google
- 检查是否
page-one.php
未被删除
$_SERVER['HTTP_REFERER']
不可靠,因为它可能是错误的,代理服务器或空的,并且$_SERVER['HTTP_X_FORWARDED_FOR']
不保证设置或可靠。
考虑到前面的注意事项,您可以通过检查以下内容来查看某人是否来自另一个站点:
if(!isset($_SESSION['page_one'] &&
!isset($_SERVER['HTTP_REFERER'] &&
!isset($_SERVER['HTTP_X_FORWARDED_FOR'])
{
header('Location: 404.php');
exit;
}
如果您向所有链接添加 get 参数,则更容易:
<a href="www.domain.com/page-two.php?link">Page 2</a>
然后:
if(!isset($_SESSION['page_one'] && !isset($_GET['link'))
{
header('Location: 404.php');
exit;
}
推荐阅读
- c# - WPF 动画不会为一位用户显示并且可能导致崩溃
- unit-testing - Vue:单元测试动态组件
- python - Django:带有动态 URL 的侧边栏:如何动态创建路径中包含动态文件夹的 URL
- python - 无效的语法 sum(list) >= 2
- reporting-services - 子报表与主报表不匹配 [设计]
- database - 为财务数据构建数据库
- python - 梯度下降返回斜率和误差的 NaN 值
- html - IOS html5文件输入视频压缩480x360
- php - PHP 联系表问题 - 找到 302
- android - 如何访问不是活动的 java 类中的 xml 文件的元素?