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