لاگین و تعیین اعتبار کاربر یکی از متداولترین خصوصیت های یک وبسایت پویاست. در این مثال بر آنیم تا نمونه از یک صفحه ورود که در هر وبسایت پویایی نیاز است را در سطحی متوسط از برنامه نویسی پی اچ پی آموزش دهیم.قبل از هر چیزی بهتر است یک نمای کلی از صفحاتی که در این آموزش نیاز خواهیم داشت را شرح بدم.
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 ساخته و کد زیر را داخل اون قرار میدیم:
سپس فایلی به نام login-form.php ساخته و فرم لاگین مورد نظرتون رو طراحی میکنید که من از کد زیر برای طراحیش استفاده کردم:
Login Form 0 ) { echo '
- ';
foreach($_SESSION['ERRMSG_ARR'] as $msg) {
echo '
- ',$msg,' '; } echo '
سپس فایلی به نام login-exec.php ساخته و کد زیر رو داخلش قرار میدیم،که توضیحات کد، خط به خط داخل کد آورده شده:
فایلی به نام login-failed.php میسازیم و که اگر لاگین با خطا مواجه شد به این فرم هدایت کنه:
Login Failed Login Failed
Login Failed!
Please check your username and password
بعد فایلی به نام member-index.php ساخته که اگر لاگین موفقیت آمیز بود به اون صفحه هدایت بشه و کد زیر رو در آن قرار بدید.
Member Index Welcome
LogoutThis is a password protected area only accessible to members.
سپس فایلی با نام auth.php برای مطلع شدن از لاگین کاربر میسازیم.
سپس فایلی به نام access-denied.php ساخته که اگر کاربر لاگین نکرده بود لود شود.
Access Denied Access Denied
Access Denied!
You do not have access to this resource.
در این مرحله logout.php را ساخته که کاربرانی که لاگین کردن بتونند خارج بشن و جلسه شون پاک بشه.
Logged Out Logout
You have been logged out.
Click here to Login
بعد ساخت همه این فایلها،در یک دایرکتوری از هاستتون قرار داده و این فایل را نیز دانلود کرده و به آنها اضافه کنید،سپس صفحه form-login رو فراخونی کرده و از این آموزش لذت ببرید. با نام کاربری test و گذرواژه test این آموزش رو تست کنید.
در ادامه نیز آموزش ساخت فرم ثبت نام رو مطالعه کنید که مکمل این آموزش می باشد.
سورس کد PHP-Login
با تشکر از آموزش خوبتون
ببخشید دو سوال داشتم:
۱- برای جلوگیری از حملات بازسازی سشن باید چیکار کرد؟
۲- من در بعضی سایت ها مطالبی مبنی بر امن نبودن هش ام ذی ۵ خوندم، درسته؟ اگر اینطوره باید از چه روشی استفاده کرد؟
برای بخش اول می تونید از این تابع session_regenerate_id استفاده کنید. http://php.net/manual/en/function.session-regenerate-id.php و یه سری نکته های دیگه که می تونید سرچ کنید. به زودی یه پست در مورد امنیت ارسال می شه که سوالهاتون رو پاسخ می ده.
سوال دوم هم درست نیست. MD5 بدون بازگشته و به هیچ وجه قابل بازیابی نیست. مگر اینکه از واژه هایی که توی واژه نامه ها هست استفاده بشه که خوب باز هم دسترسی بهشون همچین راحت نیست. ولی برای اطمینان از اینکه کد کاملن غیر قابل بازگشت باشه معمولن پسورد رو با یه رشته های دیگه ترکیب می کنن و بعد MD5 می کنن. مثلن میان پسورد رو با تایم استمپ ترکیب می کنن و یه رشته ی خاص دیگه که خود برنامه نویس می تونه تو ترکیبش دخالت کنه.
یه چیزی رو فراموش کردین. پس تکلیف آرایه ی خطا چی میشه؟
با عرض معذرت خدمت شما دوست عزیز،من کامنت شما رو تازه دیدم
بله حواسم به آرایه ی خطا در فرم لاگین نبود و باز هم معذرت
می تونید این کد رو بعد از تگ با دی در فرم لاگین اضافه کنید:
'; foreach($_SESSION['ERRMSG_ARR'] as $msg) { echo '- ',$msg,'
';
}
echo '
'; unset($_SESSION['ERRMSG_ARR']); } ?>مقاله ات رو اصلاح کن و بنویس که به روزرسانی شد
چشم
مقاله اصلاح و به روز رسانی شد
سلام
پست بسیار عالی بود
این فایل هارو ایجاد کردم و در پوشه wwwroot هاست قراردادم و فایل دیتابیس رو هم با نام login.sql در پوشه db قرار دادم. اما وقتی فایل form-login.php رو فراخوانی کردم و یوزرنیم و کلمه عبور رو test وارد کردم، با خطا مواجه شد و نتونست به دیتا بیس وصل بشه
در قسمت کنترل پنل سایت، دیتابیس رو MySQL قراردادم و یه یوزر و پسوورد هم گذاشتم و این اطلاعات رو در فایل config.php درج کردم و بجای localhost هم آدرس سایت رو قراردادم. اما بازهم نشد
لطفا بفرمائید چه موارد دیگری رو باید انجام بدم
سوالی هم در مورد دیتا بیس دارم
اینکه در قسمت بالا ساختار دیتا بیس رو با نرم افزار خاصی ایجاد می کنید؟ منظورم این هست که در مورد aspx از SQL Server استفاده می شه که نرم افزار سنگینی هست و لی آیا MySQL هم وجود خارجی داره و کاربردی هست یا فقط بمنظور اجرای فایل ها نصب میشه؟
وقتی شخصی از فرم register که نوشتید یک اکانت ثبت میکنه، اطلاعاتش در همین فایل دیتابیس پائین اون test که ایجاد کردید، اضافه میشه؟
با تشکر
سلام دوست عزیز
به علت تاخیر در جواب کامنتتون معذرت میخوام
خب شما مشکل اساسی در ایجاد پایگاه داده دارین،شما باید ابتدا نرم افزاری برای ایجاد پایگاه داده نصب کنید یا از طریق ترمینال و دستورات این کار رو انجام بدید.
برای مثال،شما با نصب نرم افزاری مثل wamp هم سرور مای اسکیوال نصب میکنید هم یوزر اینترفیسی برای کار کردن باهاش،که بتونید دتیابیس و جداول و همه کاراهای مربوط به بانک اطلاعاتی تون رو به صورت ویژوال انجام بدید.
پس اگه با ویندوز کار میکنید نرم افزاری مثل wamp یا xamp رو نصب کنید،سپس phpmyadmin رو فراخوانی کنید و دیتابیس مورد نظرتون رو اونجا ایجاد کنید
احتمالا شما از وب سرور asp برای php استفاده میکنید که جواب نمیده،برای فایلهای php از وب سرور خودش نظیره آپاچی استفاده کنید
باز اگه سوالی بود در خدمتم
سعی میکنیم مطالبی مبتدی در همین مورد براتون جور کنیم
در این نمونه که شما قرار دادید که پایگاه داده تشکیل شده و من فقط با نام login.sql سیو کردم
IIS رو از روی سیستم حذف کردم و از EasyPHP استفاده می کنم
این کدها و فایل هارو هم روی سرور هاست اصلی تست کردم با تنظیماتی که در توضیحات اشاره کردم
MySQL رو بصورت نرم افزار مشاهده نکردم بلکه بصورت یک صفحخه وب اجرا میشه که تنظیماتی داره. نمی دونم درست هست یا نه
با تشکر
لطفا اگر ممکنه مقاله ای هم برای مدیریت محتوا قرار بدید
اینکه کاربر از این طریق عضو میشه و فعالیت هایی براش در نظر گرفته میشه و مثلا می خواد در سایت پست بذاره و یا به موضوعات دیگران پاسخ بده. چیزی مانند فروم
برنامه نویسی این بخش ها به چه صورت هست؟
با تشکر
برای این کار نیاز به پیش نیاز هایی هست که خوب لازمه مثل auth یا acl
برای همین نیاز به یه آموزش کامل و مرحله به مرحله داره
برای این کار برنامه ریزی شده ولی متاسفانه زمان کافی در دست نیست
مطمئن باشید در تعطیلات عید دستی به سر و گوش این بخش هم خواهیم کشید
با تشکر از توجه تون
آیا این موارد رو میشه با ووردپرس ایجاد کرد؟ یا نیاز به برنامه نویسی و فراگیری این پیش نیازها هست؟
با سلام
تشکر میکنم ا زمطالب مفیدی که میگذارید
من کارهایی که در بالا بیان شد انجام دادم ولی بعد باز شدن صفحه لاگین این خطا ظاهر میشه
Warning: Cannot modify header information – headers already sent by (output started at c:program fileseasyphp1-8wwwloginconfig.php:12) in c:program fileseasyphp1-8wwwloginlogin-exec.php on line 101
خطای فوق درصورتیکه یوزر و پسورد وارد نشده باشه ظاهر میشه و درصورتیکه یوزر و پسورد وارد کنیم این خطا ظاهر میشه
Warning: session_regenerate_id(): Cannot send session cookie – headers already sent by (output started at c:program fileseasyphp1-8wwwloginconfig.php:12) in c:program fileseasyphp1-8wwwloginlogin-exec.php on line 125
Warning: Cannot modify header information – headers already sent by (output started at c:program fileseasyphp1-8wwwloginconfig.php:12) in c:program fileseasyphp1-8wwwloginlogin-exec.php on line 137
لطفا راهنمایی کنید که کجای کار م اشکال داره
ممون
سلام دوست عزیز
این خطا یکی از متداولترین خطاهایی هست که در شروع کار با پی اچ پی به وجود میاد.
می تونید از لینک های زیر برای حل این مشکلتون استفاده کنید:
http://www.tech-recipes.com/rx/1489/solve-php-error-cannot-modify-header-information-headers-already-sent/
http://www.geeklog.net/faqman/index.php?op=view&t=38
http://www.daniweb.com/forums/thread88479.html
البته توصیه میشه از نرم افزاری مثل wamp یا xamp برای ویندوز استفاده بشه و در درایوی غیر از c نصب بشه،درایوی که ویندوز در اون نصبه،نصب نکنید
تایع هدرتون header() رو پیدا کنید،مشکل شما مطمئنا در اون خط یا قبل از اونه.
قبل از session_start یه کاراکتری داره به خروجی ارسال می شه
شما اول از هر چیز باید سشن رو استارت کنید
سلام دوست عزیز !
مشکل شما اینه که فایل login-exec.php یا فایل های دیگه تون به صورت Unicode(UTF-8) ذخیره شده ! Session کلا با یونیکود مورد داره .
برای اینکه مشکلت حل بشه از برنامه Notepad++ استفاده کنید و فایل رو داخل برنامه باز کن و از منوی Encoding گزینه Encode to ansi را انتخاب کن و فایلت رو دوباره سیو کن و روی لوکال هاست دوباره اجراش کن.
برنامه notepad++ :
http://dl.downloadha.com/Kave/2/Notepad++_5.8.3%20(www.Downloadha.com).zip
پسورد فایل: http://www.downloadha.com
فایل هایی که در دو بخش “ایجاد فرم لاگین و رجیستر” مطرح کردید رو ایجاد کردم ولی وقتی تست کردم نشد
از WampServer هم استفاده میکنم
این کدها رو در یک فایل زیپ قرار دادم که اگر ممکنه لطف کنید و یه بررسی بفرمائید
http://blogfr.persiangig.com/RegisterLogin.zip
با تشکر
من مشکلی در فایل های شما ندیدم،با این حال سورس برنامه رو برا دانلود گذاشتم
موفق باشید.
سلام دوستان
از سورس PHP-Login که قرار دادید، فایل mysql.sql رو که در phpMyAdmin از قسمت import وارد می کنم با این خطا مواجه میشه:
http://up.iranblog.com/images/88zbb8bj7a6uoi65g7.jpg
لطفا راهنمایی بفرمائید
با تشکر
اول دیتابیس رو انتخاب کنید و بعد فایل رو ایمپورت کنید
سلام دوستان
کدی که در قسمت “آموزش ساخت ایمیل فعال سازی” توضیح دادید رو چطور میتونم به قسمت “سورس کد PHP-Login” اضافه کنم؟
من خیلی مسلط نیستم ولی هر کاری کردم درست جواب نداد…
ممکنه شما لطف کنید این نمونه رو کامل کنید؟
با تشکر از توسعه دهندگان PHP
با عرض سلام خدمت شما اسکریپت عالی بو و لی چطوری میتونم کاربر جدید تعریف کنم لطفا راهنماییم کنید خیلی ضروریه چطوری باید کاربر جدید تعریف کرد .
سلام دوست عزیز
شما باید بخش دوم و مکمل این بخش یعنی رجیستر کاربر رو هم به کارتون اضافه کنید.
موفق باشد/
با سلام
استاد عزیز من می خواستم اسکریپتی بسازم که کاربرها پس از لاگین کردن اطلاعات خودشونو ببینند و بتوانند ویرایش یا حذف کنند البته با استفاده از دیتابیس ممنون میشم اگه کمکم کنی. با تشکر
سلام . اگر ممکن است بنده را راهنمایی کنید . اگر در سایتی بخشهای مختلفی مانند اخبار ، مقالات ، فروشگاه و … باشد در هر قسمت باید کدهای زیر را وارد کرد تا از جلسه خارج نشود و یا راه دیگری هست؟
ممنون
سلام . اگر ممکن است بنده را راهنمایی کنید . اگر در سایتی بخشهای مختلفی مانند اخبار ، مقالات ، فروشگاه و … باشد در هر قسمت باید کدهای زیر را وارد کرد تا از جلسه خارج نشود و یا راه دیگری هست؟
ممنون
سلام . اگر ممکن است بنده را راهنمایی کنید . اگر در سایتی بخشهای مختلفی مانند اخبار ، مقالات ، فروشگاه و … باشد در هر قسمت باید کدهای زیر را وارد کرد تا از جلسه خارج نشود و یا راه دیگری هست؟
http://up1.iranblog.com/images/44q.jpg
ممنون
سلام دوست عزیز
این کدی که شما گذاشتین فقط آیتمی از سشن رو چاپ میکنه
ببخشید من هرکاری کردم نتواستم صفحه ی لاگین درست کنم میتوانید رانمایی کنید مرا
!
سلام خدمت پی اچ پی کاران عزیز
ببخشید تو برنامه login-exec.php خط ۵۸ چرا اپسورد رو دوباره با post فراخوانی کردین. پس فایده انجام پردازش های تابع clean و ساخت متغیر جدید password$ چی بوده؟
با سلام
ممنون از مقالات خوبتون
اگر درست فهمیده باشم : اطلاعات کاربرهای معمولی سایت داخل یک جدول می باشد و بعد از کانکت اولیه به mysql اعتبار آنها چک می شود
حال من یک نگرانی در مورد اتصال از طریق PHP با سرور دارم، منظورم همون کانکت اولیه با root (یا هر کاربرmysql) به mysql می باشد که به صورت متنی است.
آیا می تواند یک مشکل امنیتی ایجاد کند؟ حال از طرف هکر ها یا از طرف مدیر یا صاحب “هاست”، فرضا فایل حاوی کاربر mysql را باز کرده کاربر و کلمه عبور را بخوانند سپس با لاگین کردن به mysql، جداول را باز کرده لیست ایمیلها رو بردارند.
ضمن عرض سلام و خسته نباشید به شما…
میشه جواب منو به ایمیلم بفرستید؟
سوال؟من اگه بخوام پی اچ پی رو در حد حرفه ای یاد بگیرم باید چیکار کنم؟جایی هست بشه رفت کنار یه سری حرفه ای نشست یاد گرفت؟پی اچ پی رو بلدم ولی این چیزایی که اینجا از شما دیدم فهمیدم در حد صفرم.خواهش می کنم راهنماییم کنین.
با سلام
ممکنه بنده را راهنمایی کنید چرا دائما برای برنامه ام پیغام (سرور قادر به انتخاب دیتابیس نیست) یا (خطا در برقراری ارتباط با سرور) می دهد .ایراد از چیه
مشکل ممکن چندین دلل داشته باشد
شما ابتدا از نصب کامل سرور دیتابیستون مطمئن بشید
بعد، از درست بودن نام کاربری و پسوردتون مطمئن بشید
با اگه مشکل داشتین خطا رو به صورت کامل برامون ارسال کنید تا بشه بهتر کمک کرد
ــــــــــــــــــــــــــــــــ
در ضمن بنده و دوستان مشکلات خاص خودمون رو داریم بعضی وقتا میشه چندین ماه هم نمیتونیم به سایت سر بزنیم
در کل شرمنده اگه دیر شد
تشکر از راهنمایتون
مشکل برنامه ام همانطور که شما فرمودید عدم اتصال فرم login به دیتابیس بود
خیلی ممنونم که راهنماییم کردید
سلام من بعد از اجرا به این مشکل برمیخورم . میشه بگی چی کنم؟
Notice: Undefined index: ERRMSG_ARR in D:xampphtdocsshabPHP-Loginlogin-form.php on line 26
in araye ro ye dusti balatar goft tarif kon ke shoma kardi ama baz in error has chera?
عالی
سلام
چه جوری در منو تعریف کنم که بزنه login یا logout
خیلی سخت نیست
یه if می زاری که اگه سشن ست شده باشه بنویسه لاگین و اگه ست نشده باشه بنویسه لاگ اوت.
عالی بود مرسی ایشالا هر زو یک خبرنامه جدید از شما و یک آموزش جدید از شما
مشکل خطا با @ حل می شود
ببخشید نمی دونم تابع php را چطوری وارد کنم
اول خط سیشن ارور یک @ اضافه کنید
مثلا@$_SESSION['ERRMSG_ARR'] را
سلام ٰمخلص برو بچهای زنجانی.آقا من نمیدونم error زیر رو حل کنم:
Notice: Undefined index: cnt in C:\wamp\www\khojasteh\index1.php on line 3 ممنون
ہیلو
میں خریداری کے لئے ایک ڈیٹا بیس کی ضرورت ہے
ویب سائٹ shonping RU
ڈیٹا بیس سے تمام میں چاہتا ہوں کہ صرف
ای میل + ٹیبل: صرف پاس ورڈ ٹیبل پر مشتمل
اگر آپ دلچسپی رکھتے ہیں، براہ مہربانی مندرجہ ذیل شامل
ای میل: ronitarronitar yahoo.com @
یا
اسکائپ: ronitarronitar
1 نوٹ: LR بمقابلہ مطلوبہ ڈیٹا بیس خریداری سائٹ $ ۱۰
مجھے امید ہے کہ آپ کو لکھنے
شکریہ
سلام عزیز من یکم مشکل دارم نمیتونم اینجا بیان کنم میشه بهم میل بزنید
با سلام
من در هنگام عضویت با هشدار زیر مواجه می شوم لطفا راهنمایی کنید:
Warning: mysql_connect(): Access denied for user ‘root’@’localhost’ (using password: YES) in /home/u379448296/public_html/register-exec.php on line 13
Failed to connect to server: Access denied for user ‘root’@’localhost’ (using password: YES)
سلام فایل را نمی تونم دانلود کنم