使用会话限制对页面的访问

时间:2016-03-30 02:54:36

标签: php session

我使用会话在我的网站上使用了登录系统。

这是它的外观,

<?php
session_start();

ob_start();

include 'includes/db.php';

$idadm=$_POST['idadm'];
$passadm=$_POST['passadm'];

$idadm = stripslashes($idadm);
$passadm = stripslashes($passadm);
$idadm = mysql_real_escape_string($idadm);
$passadm = mysql_real_escape_string($passadm);

$sql="SELECT * FROM admin WHERE aid='$idadm' and password='$passadm'";
$result = $conn->query($sql);

$count = $result->num_rows;

if($count == 1) {
    $_SESSION['idadm'] = $idadm;
    $_SESSION['passadm'] = $passadm;

if ($_SESSION['idadm'] == 'admin') {
    header("location:admin/index.php");
} else {
    header("location:subadmin/index.php");
}
} else {
    header("location:index.php");
}

ob_end_flush();
?>

db.php具有数据库凭据。

这是受保护页面上的代码,

<?php
    session_start();
    if (!isset($_SESSION['idadm'])) {
        header('location:/index.php');
        die;
}
?>

登录脚本工作正常,除了一个问题,登录的用户可以访问admin和subadmin页面。

只有一个管理员用户,数据库中该用户的ID为“admin”。管理员应该只能访问'admin / index.php',其他用户应该能够访问'subadmin / index.php'。

如何修改脚本以实现此目的?

1 个答案:

答案 0 :(得分:0)

首先,获取$_SESSION["idadm"]$_SESSION['passadm'] ...

首先,在你的管理页面中会是这样的:

<?php
    session_start();
    if (!isset($_SESSION['idadm'])) {
        header('location:/index.php');
        die;
    } else {
        $username = $_SESSION["idadm"];
        $password = $_SESSION['passadm'];  // Also storing passwords in session vars is not a good idea. :/

然后打开数据库连接:

$pdo = new PDO($dsn, $DBUsername, $DBPass):
// or 
$mysqli = mysqli_connect($host, $DBUsername, $DBPass, "admin")

然后检查数据库中是否有当前用户名和密码...

我在PDO中这样做:

$sth = $pdo->prepare("SELECT COUNT(*) AS number_of_users FROM table_name WHERE aid = :username AND password = :password");
$sth->bindParam(":username", $username, PDO::PARAM_STR);
$sth->bindParam(":password", hash("YOUR_HASHING_ALGO", $password), PDO::PARAM_STR); // If you have not hashed the password you can remove the hash method, but not hashing a password is a horrible idea
$result = $sth->fetch(PDO::FETCH_ASSOC);
if( (int) $result["number_of_users"] >= 1 ) {
    // yay he is an admin, do somethin'
} else {
    // nope, he is not allowed to enter, what to do with him?
}

最后用以下方法关闭了else块:

}

在连接字符串中,您必须使用自己的特定凭据和数据库。

希望它可以帮到你!