0

我有以下流文件:

index.html -> login.php -> displayinbox.php

login.php 文件从数据库确认用户并重定向到 displayinbox.php 文件。

问题是,如果有人只是键入到 displayinbox.php 页面的直接链接,页面中的脚本就会运行。

我怎样才能阻止这种情况发生?我尝试了“定义”和“定义”方法,但我猜这仅适用于包含的文件。有什么帮助吗?

4

3 回答 3

2

使用会话值来跟踪用户是否登录。如果!$_SESSION['whatever'],将他们重定向到索引/登录页面。

例子:

登录.php

session_start();
/* login code here */
$_SESSION['logged_in'] = true;

显示收件箱.php

session_start();
if (!$_SESSION['logged_in']) {
    header("Location: login.php");
    exit;
}
于 2013-10-30T18:44:38.153 回答
0

有很多方法可以做到这一点。在 displayinbox.php 和 POST_SELF 的顶部包含 login.php 或登录后,设置会话 cookie 并在 displayinbox.php 页面的顶部检查它。

于 2013-10-30T18:46:02.900 回答
0

这是一个关于安全性的非常开放的问题,需要的不仅仅是这里的任何答案都可以完全提供的。在最简单的层面上,设置$_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。

于 2013-10-30T19:02:29.227 回答