我有以下流文件:
index.html -> login.php -> displayinbox.php
login.php 文件从数据库确认用户并重定向到 displayinbox.php 文件。
问题是,如果有人只是键入到 displayinbox.php 页面的直接链接,页面中的脚本就会运行。
我怎样才能阻止这种情况发生?我尝试了“定义”和“定义”方法,但我猜这仅适用于包含的文件。有什么帮助吗?
使用会话值来跟踪用户是否登录。如果!$_SESSION['whatever']
,将他们重定向到索引/登录页面。
例子:
登录.php
session_start();
/* login code here */
$_SESSION['logged_in'] = true;
显示收件箱.php
session_start();
if (!$_SESSION['logged_in']) {
header("Location: login.php");
exit;
}
有很多方法可以做到这一点。在 displayinbox.php 和 POST_SELF 的顶部包含 login.php 或登录后,设置会话 cookie 并在 displayinbox.php 页面的顶部检查它。
这是一个关于安全性的非常开放的问题,需要的不仅仅是这里的任何答案都可以完全提供的。在最简单的层面上,设置$_SESSION
变量是我要走的路。
如果您使用的是 MVC 模式,请拥有Secure_Controller
所有需要密码访问权限的控制器才能扩展。如果不使用 MVC 或什至某种类型的模板,您将不得不在您希望密码保护的每个页面中包含一个脚本。
登录.php
<?php
//check username and pw against the database
if($passwordAndUsername == 'good'){
$_SESSION['loggedIn'] = 'yes';
}
?>
安全检查.php
<?php
if($_SESSION['loggedIn'] != 'yes'){
$message = 'you must log in to see this page.';
header('location:login.php');
}
?>
在任何受密码保护的页面的开头包含 securityCheck.php。