احراز هویت کاربران با متغیرهای نشست

در هر سایتی احراز هویت کاربران یکی از مباحث اولیه در امنیت سایت می باشد. در این بحث قصد داریم یک فرم لاگین برای کاربران ایجاد کنیم. چنانچه کاربر نام کاربری و رمز عبور را مطابق آنچه در بانک اطلاعاتی ذخیره شد وارد کرد و درست بود یک نشست ایجاد شود و به صفحه ی admin.php هدایت شود. اما اگر اشتباه وارد کرد مجدد به صفحه login.php منتقل می شود. چنانچه کاربر بخواهد از طریق آدرس محتوای صفحه ی admin.php را ببیند باید ابتدا بررسی شود آیا نشست ایجاد شده یا خیر. اگر نشست ایجاد شده بود کاربر می تواند محتویات صفحه ی admin.php را ببیند در غیر اینصورت خیر. باید برگردد به صفحه ی login.php.

ابتدا یک بانک اطلاعاتی بنام usrs ایجاد می کنیم و در آن یک جدول بنام tbl_user ایجاد می کنیم. این جدول دارای سه فیلد username، pas و role است. چند رکورد به آن اضافه می کنیم به صورت شکل زیر:

محتوای جدول

جهت ایجاد فرم صفحه ی لاگین صفحه ی loginform.php بصورت زیر ایجاد می شود:

<body>
    <form method="POST" action="login.php">
        <table align="center" 
        style="background-color: burlywood;">
        <tr>
            <td>User Name:</td>
            <td><input type="text" name="uname"></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input type="text" name="pas"></td>
        </tr>
        <tr>
            
            <td><input type="submit" value="LOGIN"></td>
        </tr>
        </table>
    </form>
</body>

با اجرای فرم لاگین به صورت زیر ساخته می شود:

خروجی صفحه loginform.php

سپس با کلیک بر دکمه ی login صفحه ی login.php نشان داده می شود. ابتدا تابع نشست ایجاد می شود. سپس مقادیر وارد شده در کادرهای متنی دریافت می شود. کد آنها به صورت زیر است:

<?php
session_start();

$uname=$_POST['uname'];
$pas=$_POST['pas'];

سپس باید به بانک اطلاعاتی متصل شویم :

$db=mysqli_connect("127.0.0.1","root","","usrs");
if(!$db){
    echo "Error!";
    exit;
}
//echo "Connected!";

حال بررسی می شود مقادیری که در کادرهای متنی وارد شد در جدول tbl_user وجود دارد یا خیر. تعداد رکوردهای یافته شده متناسب با نام کاربری و رمز عبور وارد شده در متغیر num ذخیره می شود.

$query="select * from tbl_user where username='" . 
        $uname . "' and pas='" . $pas . "'";
$result=mysqli_query($db,$query);
if($result){
    //echo "Yes";
    $num=mysqli_num_rows($result);
    //echo $num;

چنانچه مقدار num بیشتر از ۰ بود نشست باید ایجاد شود و به صفحه ی admin.php منتقل می شود.

if($num>0){
        $row=mysqli_fetch_row($result);
        if($row[2]=="admin"){
            //echo $row[2];
            $_SESSION['admin']=$uname;
            header("Location:admin.php");
        }else{
            header("Location:login_form.htm");
            //echo "You are not administrator!";
        }

چنانچه مقدار num صفر بود به صفحه ی loginform.php‌ منتقل می شود:

else{
        header("Location:login_form.htm");
    }

کد کامل صفحه ی login.php در زیر آمده است:

<?php
session_start();

$uname=$_POST['uname'];
$pas=$_POST['pas'];
$db=mysqli_connect("127.0.0.1","root","","usrs");
if(!$db){
    echo "Error!";
    exit;
}
//echo "Connected!";
$query="select * from tbl_user where username='" . 
        $uname . "' and pas='" . $pas . "'";
$result=mysqli_query($db,$query);
if($result){
    //echo "Yes";
    $num=mysqli_num_rows($result);
    //echo $num;
    if($num>0){
        $row=mysqli_fetch_row($result);
        if($row[2]=="admin"){
            //echo $row[2];
            $_SESSION['admin']=$uname;
            header("Location:admin.php");
        }else{
            header("Location:login_form.htm");
            //echo "You are not administrator!";
        }

    }else{
        header("Location:login_form.htm");
    }
}
?>

پس از ساخت صفحه ی login.php موقع آن است که صفحه admin.php را ایجاد کنیم. در این صفحه ابتدا بررسی می شود آیا نشستی برای admin ساخته شده یا خیر. برای این منظور از تابع isset استفاده می شود. اگر نشست ساخته شده بود صفحه admin.php نشان داده می شود و به کاربر خوش آمدگویی نشان میدهد. در غیر اینصورت به صفحه ی loginform.php منتقل می شود. کد کامل این صفحه در زیر آمده است:

<body>
    <h1 style="text-align:center;color:blue">
        Welcome, Administrator's profile
    </h1>
    <?php
        session_start();
        if(isset($_SESSION['admin'])){
            echo "welcome ".$_SESSION['admin'];
        }else{
            header("Location:login_form.htm");
        }
    ?>
     <form method="POST" action="logout.php">
         <input type="submit" value="LOGOUT">
    </form>
</body>