آموزش ساخت صفحه ورود (لاگین)
يكشنبه, ۲۶ دی ۱۳۸۹، ۰۳:۳۷ ب.ظ
لاگین و تعیین اعتبار کاربر یکی از متداولترین خصوصیت های یک وبسایت پویاست. در این مثال بر آنیم تا نمونه از یک صفحه ورود که در هر وبسایت پویایی نیاز است را در سطحی متوسط از برنامه نویسی پی اچ پی آموزش دهیم.قبل از هر چیزی بهتر است یک نمای کلی از صفحاتی که در این آموزش نیاز خواهیم داشت را شرح بدم.
config.php: تنظیمات و جزئیات کانکت شدن دیتابیس در این فایل قرار خواهد گرفت.
login-form.php:فرم لاگین
login-exec.php:پردازش ها از فرم لاگین به این فرم هدایت خواهند شد،و مراحل اعتبار سنجی کاربر و تنظیمات سشن در این صفحه انجام خواهد شد.
logout.php:به کمک این صفحه کاربر از سشن خارج میشود.
auth.php: به کمک این صفحه خواهیم توانست از لاگین بودن یا نبودن کاربرا با خبر شویم.
خب قبل از هر چیز دیتابیس این مثال رو میسازیم،میتونید از کد زیر برای ساخت دیتابیس که حاوی یه تیبل به نام member هست استفاده کنید:
بعد این مرحله فایلی به نام config ساخته و کد زیر را داخل اون قرار میدیم:
unset($_SESSION['ERRMSG_ARR']);
}
?>
سپس فایلی به نام login-exec.php ساخته و کد زیر رو داخلش قرار میدیم،که توضیحات کد، خط به خط داخل کد آورده شده:
در ادامه نیز آموزش ساخت فرم ثبت نام رو مطالعه کنید که مکمل این آموزش می باشد.
config.php: تنظیمات و جزئیات کانکت شدن دیتابیس در این فایل قرار خواهد گرفت.
login-form.php:فرم لاگین
login-exec.php:پردازش ها از فرم لاگین به این فرم هدایت خواهند شد،و مراحل اعتبار سنجی کاربر و تنظیمات سشن در این صفحه انجام خواهد شد.
logout.php:به کمک این صفحه کاربر از سشن خارج میشود.
auth.php: به کمک این صفحه خواهیم توانست از لاگین بودن یا نبودن کاربرا با خبر شویم.
خب قبل از هر چیز دیتابیس این مثال رو میسازیم،میتونید از کد زیر برای ساخت دیتابیس که حاوی یه تیبل به نام member هست استفاده کنید:
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 ساخته و کد زیر را داخل اون قرار میدیم:
define('DB_HOST', 'localhost');//نام هاستی که استفاده میکنیدسپس فایلی به نام login-form.php ساخته و فرم لاگین مورد نظرتون رو طراحی میکنید که من از کد زیر برای طراحیش استفاده کردم:
define('DB_USER', 'root');//نام کاربری که برای اتصال به پایگاه داده از آن استفاده میشود که به صورت پیشفرض روت هست
define('DB_PASSWORD', '');//پسوردی که برای اتصال نیاز داریم که به صورت پیشفرض خالی است
define('DB_DATABASE', 'login');//نام دیتابیسمون که من لاگین انتخاب کردم
?>
Login Form
if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) {
echo '
- ';
- ',$msg,' ';
foreach($_SESSION['ERRMSG_ARR'] as $msg) {
echo '
}
echo '
unset($_SESSION['ERRMSG_ARR']);
}
?>
Login | |
Password | |
سپس فایلی به نام login-exec.php ساخته و کد زیر رو داخلش قرار میدیم،که توضیحات کد، خط به خط داخل کد آورده شده:
//قبل از هر چیز سشن رو برای استفاد استارت میکنیمفایلی به نام login-failed.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");
}
?>
بعد فایلی به نام member-index.php ساخته که اگر لاگین موفقیت آمیز بود به اون صفحه هدایت بشه و کد زیر رو در آن قرار بدید.
Login FailedLogin Failed
Login Failed!
Please check your username and password
require_once('auth.php');سپس فایلی با نام auth.php برای مطلع شدن از لاگین کاربر میسازیم.
?>
Member IndexWelcome
LogoutThis is a password protected area only accessible to members.
session_start();سپس فایلی به نام access-denied.php ساخته که اگر کاربر لاگین نکرده بود لود شود.
//چک میکنیم ببینیم که در سشن آیدی کاربر وجود دارد یا نه
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
header("location: access-denied.php");
exit();
}
?>
در این مرحله logout.php را ساخته که کاربرانی که لاگین کردن بتونند خارج بشن و جلسه شون پاک بشه.
Access DeniedAccess Denied
Access Denied!
You do not have access to this resource.
session_start();بعد ساخت همه این فایلها،در یک دایرکتوری از هاستتون قرار داده و این فایل را نیز دانلود کرده و به آنها اضافه کنید،سپس صفحه form-login رو فراخونی کرده و از این آموزش لذت ببرید. با نام کاربری test و گذرواژه test این آموزش رو تست کنید.
//متغییرهایی که در سشن ذخیره شدن آنست میشن
unset($_SESSION['SESS_MEMBER_ID']);
unset($_SESSION['SESS_FIRST_NAME']);
unset($_SESSION['SESS_LAST_NAME']);
?>
Logged OutLogout
You have been logged out.
Click here to Login
در ادامه نیز آموزش ساخت فرم ثبت نام رو مطالعه کنید که مکمل این آموزش می باشد.
۸۹/۱۰/۲۶
ببخشید دو سوال داشتم:
1- برای جلوگیری از حملات بازسازی سشن باید چیکار کرد؟
2- من در بعضی سایت ها مطالبی مبنی بر امن نبودن هش ام ذی 5 خوندم، درسته؟ اگر اینطوره باید از چه روشی استفاده کرد؟