PHP - 会话多用户和管理员权限

时间:2014-02-27 13:04:39

标签: php mysql session privileges

任何人都可以帮助我吗?

我仍然是新手,在这里使用大部分的PHP东西。我有点使用会话创建多用户的问题。

我想做的就是这个。帐户仅限管理员和仅适用于普通用户的帐户。

只有在登录的普通用户才能访问仅供用户使用的网页时,管理员权限才能访问管理员页面。

到目前为止,我已经创建了一个用户登录凭据。这仅适用于管理员。我真的很困惑如何添加非管理员才能访问它们的页面。

任何人都可以帮我这个代码吗?

这是主页

<?php

//Initialize Session
session_start();

error_reporting(E_ALL ^ E_NOTICE);

//$name = $_SESSION['username'];
if(isset($_SESSION['username']))
    {
        header('Location: index_admin.php');
    }
?>

这是管理页面

<?php
// Inialize session
session_start();

// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['username']))
    {
        header('Location: index.php');
    }
?>

这是登录表单

<form action="login.php" method="post">

                            <input type="text" name="uname"     placeholder="USERNAME . . . "  autofocus/>
                            <br/>
                            <input type="password" name="pword"     placeholder="PASSWORD . . . " />
                            <br/>
                            <center><input type="submit" name="submit"     value="LOGIN" /><button type="reset" value="Reset" />RESET</button></center>

</form>

这是login.php

<?php
session_start();

include("config.php");

$login = mysql_query("SELECT * FROM users WHERE (username = '" .     mysql_real_escape_string($_POST['uname']) . "') and (password = '" .     mysql_real_escape_string($_POST['pword']) . "')");
// Check username and password match
if (mysql_num_rows($login) == 1)
    {
        // Set username session variable
        $_SESSION['username'] = $_POST['uname'];

        // Jump to secured page
        header('Location: index_admin.php');
    }
else 
    {

        // Jump to login page

        header('Location: index.php');

    }
    ?>

这是数据库

user_tbl


id = 1


username = admin


password = 12345

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

  • 您需要在数据库中为用户类型(admin / normal_user)添加新字段。
  • 在您的登录脚本中,将用户类型保存在会话中(admin / normal_user)。
  • 现在在页面的每个页面顶部检查用户类型的会话值,如果是admin,则让页面打开,如果是normal_user重定向页面则登录。

答案 1 :(得分:1)

从您的问题看来,您将为管理用户和非管理用户使用相同的登录页面。就是这样,我会给出答案。

在验证特定用户的名称和密码的过程中,您需要确定已授予该用户的权限级别。您的用户表中可能有一个名为“privilege”的列。

usr_tbl需要看起来像这样:

 id    username     password    privilege
  1      admin      W$^%^$%^%^%  admin
  2      reggel     DJDT&646364  user
  3      ollie      DTHDHFGEERT  user

登录后,您将读取usr_table并将该用户的值从列中拉出并将其存储为会话变量,如下所示:

 $_SESSION['privilege'] = $privilege; /* from user table */

然后你可以做这样的逻辑来决定你的用户应该看到什么,以及她应该做什么。

 if ( 'admin' == $_SESSION['privilege'] ) {
    // Jump to secured page
    header('Location: index_admin.php');
 }
 else {

    // Jump to login page
    header('Location: index.php');
}

在以后的页面视图中,如果您的会话逻辑运行正常,$_SESSION['privilege']变量应继续可用。

P.S。用于安全代码的mysql_ API?真?

答案 2 :(得分:0)

理想情况下,您需要扩展服务此代码的数据结构:设置用户表和组表;这些团体将意味着访问权限。提交登录页面时,请检查数据库中的用户名,然后: -

1)如果不匹配,返回“拒绝访问”屏幕

2)如果匹配,则xref与groups表一起确定该用户的权限级别。然后:- 2a)如果是admin,返回管理员屏幕,设置适当的会话变量来存储该决定。 2b)否则,返回正常用户屏幕,同上设置适当的会话变量。

您的核心问题是,在进入“主页”时,您只需检查是否设置了用户名,然后将用户带到管理界面。这是错的。尝试将您的逻辑分解为更简单的更简单的步骤,并考虑人类术语中的“if-else”逻辑。 “我想要发生什么?”然后“我需要知道如何确定如何做到这一点?”。

祝你好运!

答案 3 :(得分:0)

我使用相同的字体,但出现一个错误

此页面不起作用本地主机过于频繁地重定向了您。 尝试清除您的cookie。 ERR_TOO_MANY_REDIRECTS

    <?php

// Include config file
require_once "config.php";

// Initialize the session
session_start();

// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}

$_SESSION['privilege'] = $privilege; /* from user table */

if ( 'admin' == $_SESSION['privilege'] ) {
    // Jump to secured page
    header('Location: index_admin.php');
 }
 else {

    // Jump to login page
    header('Location: index.php');
}

?>

<?php include "theme/header.tpl"; ?> 

    <div class="page-header">
        <h1>Hi, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Welcome to our site.</h1>
    </div>
    <p>
        <a href="reset-password.php" class="btn btn-warning">Reset Your Password</a>
        <a href="logout.php" class="btn btn-danger">Sign Out of Your Account</a>
        <a href="users.php" class="btn btn-success">Users </a>       
    </p>


<?php include "theme/footer.tpl"; ?>