Sarp
مدیر بازنشسته
ابتدا از صفحه لاگین شروع میکنم و با یه مثال توضیح میدم .
واسه طراحی یک صفحه لاگین واسه یه سایت داینامیک ما نیاز به طراحی 5 تا صفحه داریم که عبارتند از :
config.php
login-form.php
login-exec.php
logout.php
auth.php
در این مثال ما ابتدا یه دیتابیس میسازیم که حاوی یه جدول به اسم member هست :
با اجرای این کد ما یه جدول مثل این خواهیم داشت :
واسه طراحی یک صفحه لاگین واسه یه سایت داینامیک ما نیاز به طراحی 5 تا صفحه داریم که عبارتند از :
config.php
login-form.php
login-exec.php
logout.php
auth.php
- فایل config.php واسه تنظیمات وصل شدن به دیتابیس هست . مثل یوزرنیم و پسورد و . . .
- login-form.php هم که از اسمش معلومه . همون فرم لاگین مون هست
- بعد دریافت اطلاعات از طریق login-form.php این اطلاعات برای پردازش و سنجش اعتبار و تنظیمات session به صفحه login-exec.php فرستاده خواهند شد .
- logout.php هم واسه خروج از session هست
- auth.php واسه بررسی لاگین یا لاگ اوت بودن اربر هست
در این مثال ما ابتدا یه دیتابیس میسازیم که حاوی یه جدول به اسم member هست :
PHP:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `login`
--
-- --------------------------------------------------------
--
-- Table structure for table `members`
--
CREATE TABLE IF NOT EXISTS `members` (
`member_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`firstname` varchar(100) DEFAULT NULL,
`lastname` varchar(100) DEFAULT NULL,
`login` varchar(100) NOT NULL DEFAULT '',
`passwd` varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (`member_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `members`
--
INSERT INTO `members` (`member_id`, `firstname`, `lastname`, `login`, `passwd`) VALUES
(1, 'test', 'test', 'test', '098f6bcd4621d373cade4e832627b4f6');
حالا برسم سر وقت ساختن صفحه config
این کدها رو تو صفحه configrvhv میدیم :
در صفحه login-form.php این کدها رو قرار میدیم (توضیح خاصی نیاز نداره) :
این کدها رو تو صفحه configrvhv میدیم :
PHP:
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'login');
?>
- در خط دوم نام هاست مورد استفاده رو باید ذکر کنیم
- در خط سوم نام کاربری ای که واسه کانکت شدن به دیتابیس ازش استفاده میکنیم که به صورت دیفالت root هست
- خط چهارم پسورد همون یوزرنیم هست که به صورت دیفالت خالی هستش
- در خط پنجم هم نام نام دیتابیس رو تعیین میکنیم که در اینجا login هست اسم دیتابیسمون
در صفحه login-form.php این کدها رو قرار میدیم (توضیح خاصی نیاز نداره) :
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login Form</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) {
echo '<ul class="err">';
foreach($_SESSION['ERRMSG_ARR'] as $msg) {
echo '<li>',$msg,'</li>';
}
echo '</ul>';
unset($_SESSION['ERRMSG_ARR']);
}
?>
<p> </p>
<form id="loginForm" name="loginForm" method="post" action="login-exec.php">
<table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
<td width="112"><b>Login</b></td>
<td width="188"><input name="login" type="text" id="login" /></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input name="password" type="password" id="password" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Login" /></td>
</tr>
</table>
</form>
</body>
</html>
فایل login-exec.php :
PHP:
<?php
session_start();
require_once('config.php');
$errmsg_arr = array();
$errflag = false;
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('خطا در برقراری ارتباط با سرور: ' . mysql_error());
}
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("سرور قادر به انتخاب دیتابیس نیست");
}
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
$login = clean($_POST['login']);
$password = clean($_POST['password']);
if($login == '') {
$errmsg_arr[] = 'نام کاربری اشتباه است';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'پسورد اشتباه است';
$errflag = true;
}
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: login-form.php");
exit();
}
$qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'";
$result=mysql_query($qry);
if($result) {
if(mysql_num_rows($result) == 1) {
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
$_SESSION['SESS_LAST_NAME'] = $member['lastname'];
session_write_close();
header("location: member-index.php");
exit();
}else {
header("location: login-failed.php");
exit();
}
}else {
die("Query failed");
}
?>
خط 2 . session رو استارت میزنیم
خط 3 . اضافه کردن فایل config برای اتصال به دیتابیس
خط 4 . خطاهایی که موقع سنجش اعبار اطلاعات ورودی رخ میده رو تو یهآرایه قرار میده
خط 6 . اتصال به mysql سرور
خط 10 . انتخاب دیتابیس
خط 14 . فراخوانی تابع clean که کاراکترهای غیرمجاز رو پاک میکنه که برای جلوگیری از حملات SQL injection لازمه (یا بهتره بگم واجبه )
خط 21 . مقادیر ارسالی از طرف کاربر رو بررسی میکنه با استفاده از تابع clean
خط 23 . تعیین صحت فرم یا همون validation فرم
خط 31 . در صورتی که مقادیر ارسالی از طرف کاربر صحیح یا معتبر نباشند ، به فرم لاگین ریدایرکت میشه
خط 37 . کوئری
خط 40 . بررسی میکنه عمل کوئری با موفقیت انجام شده یا نه !
خط 42 . لاگین با موفقیت اجرا شد
خط 41 . لاگین با خطا مواجه شد
یه فایل به اسم login-failed.php میسازیم تا اگه لاگین با خطا مواجه شد ، به این فرم هدایت شه :
خط 3 . اضافه کردن فایل config برای اتصال به دیتابیس
خط 4 . خطاهایی که موقع سنجش اعبار اطلاعات ورودی رخ میده رو تو یهآرایه قرار میده
خط 6 . اتصال به mysql سرور
خط 10 . انتخاب دیتابیس
خط 14 . فراخوانی تابع clean که کاراکترهای غیرمجاز رو پاک میکنه که برای جلوگیری از حملات SQL injection لازمه (یا بهتره بگم واجبه )
خط 21 . مقادیر ارسالی از طرف کاربر رو بررسی میکنه با استفاده از تابع clean
خط 23 . تعیین صحت فرم یا همون validation فرم
خط 31 . در صورتی که مقادیر ارسالی از طرف کاربر صحیح یا معتبر نباشند ، به فرم لاگین ریدایرکت میشه
خط 37 . کوئری
خط 40 . بررسی میکنه عمل کوئری با موفقیت انجام شده یا نه !
خط 42 . لاگین با موفقیت اجرا شد
خط 41 . لاگین با خطا مواجه شد
یه فایل به اسم login-failed.php میسازیم تا اگه لاگین با خطا مواجه شد ، به این فرم هدایت شه :
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Login Failed</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Login Failed </h1>
<p align="center"> </p>
<h4 align="center">Login Failed!<br />
Please check your username and password</h4>
</body>
</html>
و همچنین فایلی به اسم member-index.php که در صورت موفقیت آمیز بودن لاگین بهش هدایت شه :
PHP:
<?php
require_once('auth.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Member Index</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Welcome <?php echo $_SESSION['SESS_FIRST_NAME'];?></h1>
<a href="logout.php">Logout</a>
<p>This is a password protected area only accessible to members. </p>
</body>
</html>
فایل auth.php برای اطلاع از لاگین شدن کاربر :
کد:
<?php
session_start();
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
header("location: access-denied.php");
exit();
}
?>
در خط سوم بررسی میشه که آیا در session آی دی کاربر وجود دارد یا نه !
ایجاد فایل access-denied.php برای اینکه اگه کاربر لاگین نکرده باشه لود شه :
ایجاد فایل access-denied.php برای اینکه اگه کاربر لاگین نکرده باشه لود شه :
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Access Denied</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Access Denied </h1>
<p align="center"> </p>
<h4 align="center" class="err">Access Denied!<br />
You do not have access to this resource.</h4>
</body>
</html>
و در آخرین مرحله از ساخت صفحه لاگین ، logout.php رو میسازیم که کاربر بعد از لاگین بتونه خارج شه و از جلسه ش پاک شه
PHP:
<?php
session_start();
unset($_SESSION['SESS_MEMBER_ID']);
unset($_SESSION['SESS_FIRST_NAME']);
unset($_SESSION['SESS_LAST_NAME']);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Logged Out</title>
<link href="loginmodule.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Logout </h1>
<p align="center"> </p>
<h4 align="center">You have been logged out.</h4>
<p align="center">Click here to <a href="login-form.php">Login</a></p>
</body>
</html>
در خط سوم متغییرهایی که در session ذخیره شده اند unset میشن
آخرین ویرایش: