Php 如何为特定用户设置会话

Php 如何为特定用户设置会话,php,session,Php,Session,我正在尝试从我的数据库(管理员)为特定用户设置会话 这个想法是,如果管理员登录,他将重定向到管理员页面。而且会有更多的特权 session_start(); require 'funcs.php'; $error = FALSE; if (! empty($_POST)) { $username = $_POST['username']; $password = md5($_POST['password']); $sql = "SELECT * FROM `users

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

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;
    }

您可以在数据库中添加一个USERTYPEENUM字段('USER','ADMIN'),并有一个硬编码的欢迎页面。如前所述,为了避免sql注入,您必须转义用户名和密码(例如mysql)


在本例中,用户将被重定向到*index_ADMIN.php*或*index_user.php*。您可以检查$\u SESSION['group']以确定哪些操作是允许的或不允许的

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

$_SESSION['userlevel'] = $result[0]['user_level'];
然后您可以执行
if/else
检查到此值

编辑: 您的表结构应该类似于:

id, username, password, user_level = (normal|admin)
user\u 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");
}

类似这样的情况…

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

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

<?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
} 
?> 


不要死。。。这是病态的,它不让您的会话自己序列化:)。。。return改为return。@OrangeSill这是一种传统做法,建议在
header()
重定向后显式退出(与
die()
相同),以防止
header()
之后的任何代码执行,这有时会发生。退出也是一种替代方法OK,但我问的问题是什么?我如何为特定用户设置会话-在我的情况下是admin@OfirKitlaro你需要更具体一些。您是否需要确定登录的用户是否是管理员?你需要什么帮助?请注意,尽管我们无法看到您的
query()
函数中发生的一切,但它很可能容易受到SQL注入的攻击,并且任何用户都可能以任何其他用户(包括管理员)的身份登录!你说的分配标志是什么意思?我是php新手,请原谅:/你能描述一下我应该在数据库中的用户级别值中输入什么吗?@OfirKitlaro-用户级别值应该是普通用户或管理员用户,并且在默认情况下设置它。它应该是一个普通用户“normal”,除非您希望该用户是管理员,然后将此列设置为“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
} 
?> 
<?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>";      
            }
    }
}
?>
<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>