如何为特定用户设置会话

时间:2013-05-21 16:49:22

标签: php session

我正在尝试从我的数据库(admin)为特定用户设置会话 这个想法是,如果管理员登录,他将重定向到管理页面。并将拥有更多特权。

session_start();
require 'funcs.php';

$error = FALSE;

if (! empty($_POST)) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $sql = "SELECT * FROM `users` WHERE
            `username` = '$username' AND
            `password` = '$password' LIMIT 1";





    $result = query($sql,TRUE);
    if(! empty($result)) {
        $_SESSION['name'] = $result[0]['fullname'];
        $_SESSION['user'] = $result[0]['username'];
        header("Location: index.php");
        die;
    } else {
        $error = TRUE;
    }

4 个答案:

答案 0 :(得分:2)

<?php
session_start();
include('../database/connect.php'); // Database connect
if(isset($_POST['login']))
{
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
    if($username =="")
    {
        $erro_msg_au="<font color=red><b>"."Please Enter Username"."</b></font>";
    }
    elseif($password =="")
    {
        $erro_msg_ap="<font color=red><b>"."Please Enter Password"."</b></font>";
    }
    if($username !="" && $password !="")
    {
        $sql=mysql_query("SELECT * FROM users where email_id='$username' AND password='$password' and usertype='admin'");   
        $row=mysql_fetch_array($sql);
            if($row['email_id']!="")
            {
                $_SESSION['admin']=$row['email_id'];
                echo "<script language=javascript>window.location='dashboard.php'</script>";
            }
            else
            {
                $erro_msg="<font color=red><b>"."Invalid Login Information"."</b></font>";      
            }
    }
}
?>

HTML脚本:

<form id="login_form" name="login_form" method="post">
<input name="username" type="text" id="username" value="<?php echo $_POST['username']?>" />
<input name="password" type="password" id="password" />
<input name="btnlogin" type="submit" value="Login" /> 
</form> 

答案 1 :(得分:0)

您可以在数据库中添加 USERTYPE ENUM字段('USER','ADMIN')并拥有硬编码的欢迎页面。正如已经说过的,你必须转义用户名和密码以避免sql注入(这个例子是为了mysql)

    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $sql = "SELECT * FROM `users` WHERE
            `username` = '". mysql_real_escape_string($username)."' AND
            `password` = '". mysql_real_escape_string($password)."' LIMIT 1";
    $result = query($sql,TRUE);
    if(! empty($result)) {
        $_SESSION['name'] = $result[0]['fullname'];
        $_SESSION['user'] = $result[0]['username'];
        $_SESSION['group'] = $result[0]['usertype'];
        header("Location: index_".$result[0]['usertype'].".php");
        die;
    } else {
        $error = TRUE;
    }

在示例中,用户将被重定向到* index_ADMIN.php *或* index_USER.php *。您可以检查$ _SESSION ['group']以确定允许的操作

答案 2 :(得分:0)

我首先在我的表格中添加一个新列,即user_level 此标志将帮助您确定哪个用户是管理员,哪个用户不是。然后您可以简单地将该标志分配给另一个会话值:

$_SESSION['userlevel'] = $result[0]['user_level'];

然后你可以if/else检查这个值......

编辑: 你的表结构应该是这样的:

id, username, password, user_level = (normal|admin)

user_level值应该是普通用户或管理员用户,并且默认情况下设置它。它应该是普通用户,除非您希望该用户成为管理员,然后将此列设置为“admin”。

现在转到你的代码:

session_start();
require 'funcs.php';

$error = FALSE;

if (! empty($_POST)) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $sql = "SELECT * FROM `users` WHERE
            `username` = '$username' AND
            `password` = '$password' LIMIT 1";

    $result = query($sql,TRUE);
    if(! empty($result)) {
        $_SESSION['name'] = $result[0]['fullname'];
        $_SESSION['user'] = $result[0]['username'];
        $_SESSION['userlevel'] = $result[0]['user_level'];

        if( $_SESSION['userlevel'] === 'admin')
        {
           //go to admin page
           header("Location: admin.php");
        }
        else
        {
           header("Location: index.php");
        }
        exit;
    } else {
        $error = TRUE;
    }

现在在您的管理页面中,您需要通过在所有管理页面中执行此例程来检查该用户是否实际上是管理员:

if(!isset($_SESSION['userlevel']) || $_SESSION['userlevel'] !== 'admin') //you can add more checks
{
   //redirect to login page
   header("Location: login.php");
}

类似的......

答案 3 :(得分:0)

您编写的代码大致适用于发送用户数据库中的用户并成功登录到页面index.php。如果您上面编写的代码实际上是IN index.php,那么在调用session_start()之后但在SQL查找之前需要代码以检查用户是否已经登录。

如果该用户是“admin”,则为用户提供所需的额外权限。您将需要在要向其显示管理员或登录用户的任何页面上以相同方式检查会话变量。例如,您的页面可能会检查如下:

<?php 
// if session already started, this loads $_SESSION with existing values:
session_start();

if(isset($_SESSION['user'])) { 
    // Code for Logged members 
    if ($_SESSION['user'] === "admin") {
        // Code to show for admin user
    }
    else {
        // code to show logged-in non-admin users
    }
} 
else { 
    // Code to show not-logged in users
} 
?>