آموزش PHP-MVC – جلسه 9# ورود (لاگین)و خروج کاربر در mvc-php

برنامه نویسی mvc در php

ورود و خروج کاربر در یک سیستم مبتنی بر وب نیازی اساسی است و در چارچوب mvc این کار به شکل خاصی صورت می گیرد. در این بخش روش لاگین و لاگ اوت کردن کاربر را در چارچوب MVC آموزش می دهیم.

برای پیاده سازی تایید هویت کاربر و کنترل دسترسی کاربران به قسمت های اصلی برنامه و اطلاعات باید روشی برای شناسایی و تائید هویت و مجازشماری کاربران داشته باشیم.

معمول ترین راه برای تائید هویت و کنترل دسترسی کاربران، ایجاد یک جدول در بانک اطلاعاتی برای نگهداری مشخصات از جمله نام کاربری و کلمه عبور کاربران و طراحی فرم لاگین در برنامه برای واردکردن نام کاربری و کلمه عبور و استفاده از session برای نگهداری وضعیت کاربران مجاز وارد شده می باشد.

روش کار به این صورت است که با نمایش فرم لاگین، نام کاربری و کلمه عبور دریافت می شود و با اجرای یک پرس و جو در بانک اطلاعاتی اگر کاربری با این مشخصات در جدول کاربران وجود داشت، برای او نشانه ای (مثلا نام کاربری ) در داخل session  ذخیره می شود و از این پس برای اجرای هر صفحه از سایت به session  رجوع می شود، اگر نشانه فوق در سشن وجود داشت یعنی اینکه کاربر به درستی لاگین کرده است و گرنه کاربر غیرمجاز بوده و باید لاگین کند و به صفحه لاگین هدایت می شود .

پیاده سازی ورود و خروج کاربر در چارچوب mvc

برای پیاده سازی ورود/خروج کاربر در برنامه مبتنی بر mvc مراحل ششگانه زیر را انجام می دهیم:

۱- یک جدول به نام tbl_users با ستون های شناسه کاربر، نام کاربری و کلمه عبور ایجاد کرده و مشخصات یک کاربر را در آن درج می کنیم.

کدنویسان - جدول کاربران - لاگین کاربر در ام وی سی

۲- سپس یک فایل user_model.php حاوی کلاس مدل برای  کاربران در پوشه models ایجاد کرده و توابعی برای خواندن مشخصات کاربر بر اساس نام کاربری و کلمه عبور به آن اضافه می کنیم تا نام کاربری و کلمه عبور را بعنوان پارامتر دریافت کند و مشخصات کامل کاربر را از بانک اطلاعاتی خوانده و برگرداند.

<?phpclass user_model extends model
{
public function getRowByUP($uname , $upass )
{
$sql = "SELECT * FROM tbl_users
WHERE  `uname`='$uname' and `upass`=$upass ";
$row = $this->getRow($sql);
return $row;
}
}
?>

۳- یک فایل الگو بنام login.tpl در زیر پوشه user از پوشه views برای دریافت نام کاربری و کلمه عبور از کاربر طراحی می کنیم:

<?php include('views/header.tpl');?>
<form action="index.php?id=user/check" method="post">
<table width="80%" border="0" >
<tr>
<td width="20%">&nbsp;</td>
<td width="80%"><h2> login</h2></td>
</tr>
<tr>
<td>username :</td>
<td><input name="uname" type="text" /></td>
</tr>
<tr>
<td>password:</td>
<td><input name="upass" type="password" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="" type="submit" value=" Login   " /></td>
</tr>
</table></form>
<?php include('views/footer.tpl');?>

این فرم نام کاربری و کلمه عبور را دریافت کرده و با درخواست user/check به کنترولر می فرستد.

۴- یک کلاس کنترولر در فایل user_controller.php در پوشه controllers ایجاد می کنیم که دارای توابع زیر است:

تابع login : برای درخواست نمایش فرم لاگین

تابع check : برای درخواست بررسی اعتبار نام کاربری و کلمه عبور

تابع logout: برای درخواست لاگ اوت شدن(خروج) کاربر

<?php
class user_controller extends controller
{
public function login()
{
$this->_setView("login");
$this->_view->set('title', 'Login User');
return $this->_view->output();
}
//.............public function check()
{
$uname =$_POST['uname'];
$upass =$_POST['upass'];
$row = $this->_model->getRowByUP($uname , $upass );
if ($row )
{
$_SESSION['uname']=$row['uname'];
header('location:index.php?stud/index');
exit;
}
else
return $this->login();
}public function logout()
{
unset($_SESSION['uname']);
header('location:index.php?user/login');
}
}?>

در تابع login ، فایل الگو برای نمایش به کاربر تعیین شده و به او نمایش داده می شود.

در تابع check : نام کاربری و کلمه عبور از فرم دریافت شده و بانک اطلاعاتی بررسی می شود اگر کاربری با این مشخصات وجود داشت، نام کاربری او در داخل session  ذخیره شده و صفحه نمایش لیست دانشجویان درخواست می شود ( شما می توانید هر درخواستی را اینجا قرار دهید) و اگر کاربری پیدا نشد تابع login  فراخوانی می شود تا دوباره فرم لاگین به کاربر نشام داده شود.

در تابع logout : ابتدا نام کاربری از سشن پاک می شود (تابع unset برای حذف  متغیر از حافظه استفاده می شود) ، پس از حذف نشانۀ session صفحه لاگین درخواست می شود.

 

۵- فایل bootstrap.php از پوشه utilities  را اصلاح می کنیم. فایل bootstrap.php همان فایلی است که برای هر درخواستی اجرا می شود و درخواست را تفسیر کرده و تابع درخواستی از کنترلر را فراخوانی می کند. ما می توانیم در ابتدای این فایل session را شروع به کار کنیم. و قبل از فراخوانی تابع کنترولر، اعتبار کاربر را بررسی کنیم، اگر کاربر از قبل لاگین کرده و داخل سشن نشانه نام کاربری وجود دارد به او اجازه فراخوانی بدهیم و گرنه صفحه لاگین را به او نشان بدهیم.

<?php
session_start(); // شروع بکار سشن
$controller = "stud";
$action = "index";
$query = null;if (isset($_GET['id']))
{
$params = array();
$params = explode("/", $_GET['id']);
$controller = ucwords($params[0]);
if (isset($params[1]) && !empty($params[1]))
{
$action = $params[1];
}
if (isset($params[2]) && !empty($params[2]))
{
$query = $params[2];
}
}$modelName = $controller;
$controller .= '_controller';
$load = new $controller($modelName, $action);
// بررسی اعتبار کاربر
if ($action!='login' && !isset($_SESSION['uname']))
header('location:index.php?id=user/login');
if (method_exists($load, $action)  )
$load->$action($query);
else  echo "request invalid";
?>

برای بررسی عدم اعتبار کاربر از دستورات زیر استفاده شده است:

if ($action!='login' && !isset($_SESSION['uname']))
header('location:index.php?id=user/login');

در این دستورات، اگر نام تابع درخواستی مخالف login است و در session هم نام کاربری (نشانۀ لاگین) وجود ندارد کاربر به صفحه لاگین هدایت شده است . اگر برای چند درخواست کاربر نیاز به لاگین نداشته باشد، می توان همه درخواست ها را در آرایه دلخواهی (مثلاً $list1) قرار داد و شرط فوق را بصورت زیر تغییر داد:

$list1=array('user/login' , 'stud/index');
$req=strtolower("$modelName/$action");
if (!in_array($req,$list1) && !isset($_SESSION['uname']))
header('location:index.php?id=user/login');

در آرایه $lidt1   فقط دو درخواست user/login  و stud/index قرارگرفته پس برای درخواست این دو صفحه نیازی به لاگین کردن کاربر نخواهد بود، شما می توانید درخواست های دیگری به آن اضافه کنید.

 

۶- برای اضافه کردن امکان لاگ اوت برای کاربر می توان یک متغیر بنام uname در تابع _set کلاس کنترولر تعریف کرد تا برای همه درخواست ها به view  فرستاده شود ، در صورتی که کاربر لاگین کرده، نام کاربری را به آن نسبت می دهیم و گرنه پوچ را.

protected function _setView($viewName)
{
$this->_view = new View(HOME . DS . 'views' . DS . strtolower($this->_modelBaseName) . DS . $viewName . '.tpl');  if (isset($_SESSION['uname']))
              $this->_view->set('uname' , $_SESSION['uname']);
              else $this->_view->set('uname' , '' );  
}

در فایل الگوی header.tpl این متغیر را بررسی می کنیم اگر مقدار آن پوچ بود لینک لاگین و اگر غیرپوچ بود لینک هایی برای دسترسی به امکانات سایت و لینک لاگ اوت را نشان بدهد.

<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<h3>
<?php if ($uname!=''){ ?>
<a href="index.php?id=stud/index"> studnets </a> |
<a href="index.php?id=dars/index"> Doroos</a> |
<a href="index.php?id=user/logout">logout</a>
<?php } ?>
</h3>
<h1>
<?php echo $title ; ?>
</h1>
<hr />

در نتیجه شکل کلی صفحات بصورت زیر خواهد بود :

پیاده سازی لاگین کاربر در ام وی سی - PHP

در این بخش روش لاگین کاربر در برنامه مبتنی بر mvc را آموزش دادیم و حداقل کدنویسی های لازم برای این کار را به سایت اضافه کردیم.شما می توانید با تکمیل کلاس های مدل، کنترولر و فایل های view امکانات بیشتری برای مدیریت کاربران نیز اضافه کنید.

دریافت نمونه پروژه دارای امکانات لاگین و لاگ اوت

برچسب ها

, , , , ,

محصولات پیشنهادی


نظرات کاربران


نظرات برای برنامه نویسی php با mvc | بدون نظر »

کاربر عزیز، لطفاً دیدگاه ارزشمند خود را از طریق فرم زیر برای ما ارسال کنید:

درباره کدنویسان
آکادمی کدنویسان جهت کمک به دانشجویان رشته های کامپیوتر و فناوری اطلاعات و همه علاقمندان به طراحی و برنامه نویسی برای ویندوز، وب و موبایل ایجاد شده است.
بیشتر آموزش های سایت کدنویسان، بصورت رایگان ارائه شده است و بعضی بسته های آموزشی تصویری و نیز نرم افزارهای پیاده سازی شده در ازای پرداخت، قابل دانلود هستند.
هر گونه نظر، انتقاد یا پیشنهادی در مورد مطالب یا عملکرد کدنویسان دارید، حتما با ما در میان بگذارید.
نمادهای اعتماد ما


تماس با ما
  • شماره همراه : ۰۹۱۵۱۶۰۴۰۶۸
  • آی دی تلگرام : @mmoha94
  • پست الکترونیکی : mohammadi.sm@gmail.com
  • آدرس پستی : بیرجند، خیابان پیروزی، پیروزی ۹، پلاک ۲۸
کلیه حقوق متعلق به سایت کدنویسان است، انتشار و کپی برداری از مطالب این سایت غیرمجاز بوده و پیگرد قانونی دارد.