【问题标题】:Restrict direct page access限制直接页面访问
【发布时间】:2011-10-15 13:42:54
【问题描述】:
为了保护我正在开发的网站的管理员区域,我制作了一个 index.php,其中包含
if (isset($_POST['password']) && isset($_POST['userName'])) {
if($_POST['password']==$pass && $_POST['userName']==$username)
{
header( 'Location: admin.php' ) ;
}
这将重定向到同一文件夹中名为 admin.php 的文件。问题是如果我写localhost/folder/admin.php,我可以访问这个文件。请告诉我如何限制对该页面的直接访问。访问它的唯一方法应该是在用户名和密码之后的 index.php 中。
【问题讨论】:
标签:
php
redirect
access-control
【解决方案1】:
您应该查看 PHP 会话。您可以在该重定向文件中设置会话变量“isLogged”,然后在 admin.php 中检查该会话变量是否已注册,如果没有则重定向到登录页面!
session_start();
if (isset($_POST['password']) && isset($_POST['userName'])) {
if($_POST['password']==$pass && $_POST['userName']==$username)
{
header( 'Location: admin.php' ) ;
$_SESSION['isLogged'] = true;
}
admin.php
session_start();
if(!$_SESSION['isLogged']) {
header("location:login.php");
die();
}
注意:session_start();必须在 $_SESSION 全局可用之前调用。
【解决方案2】:
设置一个会话变量并在每次有人访问 admin.php 时检查它
<?php
if (isset($_POST['password']) && isset($_POST['userName'])) {
if ($_POST['password'] == $pass && $_POST['userName'] == $username) {
if (!session_id())
session_start();
$_SESSION['logon'] = true;
header('Location: admin.php');
die();
}
?>
和
//admin.php
if (!session_id()) session_start();
if (!$_SESSION['logon']){
header("Location:index.php");
die();
}
【解决方案3】:
设置表示用户已成功登录的会话值,在您想要保护的每个页面上检查它,如果未设置该值,则重定向到登录。