در صفحه ورود کاربران , قابلیت “مرا به خاطر بسپار ” – Remember me برای ذخیره کردن اطلاعات نام کاربری و رمز عبور کاربر در مرورگر می شود و در زمان لاگین شدن دوباره می تواند جالب و کاربردی باشد . این کار باعث می گردد که کاربر از وارد کردن دوباره اطلاعات ورود در هربار لاگین جلوگیری کند .
در این مقاله قصد داریم یک فرم لاگین با قابلیت مرا به خاطر بسپار در php ایجاد کنیم . در این مثال , ما از کوکی ها در php استفاده میکنیم.
فرم لاگین PHP
این کدها یک فرم لاگین با کدهای php برای پر کردن اطلاعات از قبل ذخیره شده نشان می دهد . این فرم یک چک باکس برای remember me هم دارد . اگر این چک باکس تیک زده شده باشد بعد از وارد کردن اطلاعات و زدن دکمه login اطلاعات برای دفعه های بعد ذخیره خواهد شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php session_start(); //if either cookie or session is set, redirect to home page if((isset($_COOKIE['user']) && $_COOKIE['user'] != '') || (isset($_SESSION['user']) && $_SESSION['user'] !='')){ header("Location: http://domain.com/home.php"); }else{ ?> <!DOCTYPE html> <html> <head> <title>Remember Me</title> </head> <body> <div id="container"> <form action="login.php" method="POST"> <input type="text" name="username" placeholder="username"> <input type="password" name="password" placeholder="password"> <button>Login</button><br><br> <input type="checkbox" name="remember" value="true"> Remember Me </form> </div> </body> </html> <?php } ?> |
در اول صفحه ما بررسی می کنیم که آیا متغییر session یا cookie ست شده است یا نه . اگر هر کدام از آنها ست شده باشد ، کاربر به مستقیما به صفحه home.php هدایت می کنیم
برای آشنایی با ریدایرکت با php کلیک کنید
فایل login.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php $username = $_POST['username']; $password = $_POST['password']; $remember = $_POST['remember']; $con = mysqli_connect('hostname','username','password','dbname') or exit(); $query = "SELECT id FROM members WHERE username='$username' AND password='$password'"; $result = mysqli_fetch_assoc(mysqli_query($con, $query)); $id = $result['id']; $cookie_name = "user"; $cookie_value = $id; //expiriry time. 86400 = 1 day (86400*30 = 1 month) $expiry = time() + (86400 * 30); if($remember == 'true'){ //setting cookie variable setcookie($cookie_name, $cookie_value, $expiry); }else{ //if your server requires to set session path session_start(); $_SESSION['user'] = $id; } //redirecting to home page header("Location: http://domain.com/home.php"); exit; ?> |
اول از همه ما id کاربر را با تطبیق اطلاعات کاربر در دیتابیس ، بدست می آوریم . بعد اگر مقدار چک باکس ” مرا به خاطر بسپار ” تیک خورده باشد ، یک کوکی به اسم user با مقدار id ای که از دیتابیس fetch شده است می سازیم . همچنین می توانیم یک تاریخ یا زمان را برای تاریخ انقضای کوکی در نظر بگیریم . اما این مورد اختیاری است . اگر هیچ تاریخ انقضایی بری cookie در نظر نگیرید ، کاربر برای همیشه (forever) لاگین خواهد ماند مگر آنکه دستی کوکی ها را حذف کند یا logout کند
اگر چک باکس ” مرا به خاطر بسپار ” تیک نخورده باشد ، یک session با اسم user ومقدار id ست می کنیم.
در نهایت ، کاربر را به صفحه پروفایل کاربری یا هر صفحه دیگر هدایت می کنیم . در اینجا به home.php ریدایرکت خواهد شد.
فایل home.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php session_start(); if(isset($_COOKIE['user']) && $_COOKIE['user'] != ''){ $user = $_COOKIE['user']; //get user data from mysql }else if(isset($_SESSION['user']) && $_SESSION['user'] !=''){ $user = $_SESSION['user']; //get user data from mysql }else{ header("Location: http://domain.com/"); exit; } /* Show user details based on the fetched data */ echo "<a href='logout.php'>Logout</a>"; ?> |
در اول ، ما چک می کنیم که آیا کوکی یا سیشن ست شده است یا نه ، اگر بله ، در اینصورت از id کاربر را برای دریافت و نمایش اطلاعات پروفایل از دیتابیس ، استفاده می کنیم
نکته : دقت کنید قبل از استفاده مستقیم از id ذخیره شده کوکی کاربر در کوئری sql آن را با تابع intval() به مقدار عددی تبدیل کنید تا هرگونه داده مخرب از متغیر ، sanitize یا همان پاکسازی شود.
همچنین یک صفحه logout داریم که کاربر با باز کردن آن ، تمام اطلاعات سیشن و کوکی کاربر حذف خواهد شد.
برای آشنایی با نحوه کار با کوکی ها در php و استفاده از SESSION کلیک کنید
فایل logout.php
1 2 3 4 5 6 7 8 9 10 11 |
<?php session_start(); //deleting cookie by setting expirty to past time $res = setcookie('user', '', time() - 3600); //destroys all session variables session_destroy(); header("Location: http://domain.com/"); exit; ?> |
هیچ روش مسقیم یا تابعی برای حذف کوکی توسط php وجود ندارد . بنابراین ما با ست کردن زمان گذشته آن را منقضی می کنیم ، در اینصورت خود مرورگر به صورت اتوماتیک کوکی ها را حذف می کند.
اگر همه چی با موفقیت انجام شود ، ما به صفحه index.php ریدایرکت خواهیم شد .
افزودن مرا به خاطر بسپار در php یکی از موارد کاربردی در طراحی صفحه لاگین کاربران بود که در سایت های فروشگاهی بخصوص بسیار کارامد و مفید است . امیدوارم در پروژه هایی که می نویسید استفاده لازم را از این کد ها ببرید .
موفق باشید.
مرا به خاطر بسپار تیکی هست که ما رو از زدن یوزر پسورد بی نیاز میکنه
شما اموزش سشنی رو دادید که تنظیم کنه کاربر چقدر توی حالت login بمونه
تیک remember me چیز دیگه است درسته؟!
یا من متوجه نشدم!
این تیک برای اینه که کاربر در حالت بیشتری تو لاگین بمونه
سلام ممنون از وقتی که گذاشتین و تلاشی که کردین کلیت کار و درست انجام دادین اما چند تا باگ داره و رفع باگ و توضیحش الان از حوصله خارج هست واقعا. فقط این مورد و بگم دو تا باگ اصلی که خیلی تو چشم هست
اون قسمت که گفتین اگه سیشن یا کوکی ست شده بود هدایت کردین به صفحه home در واقع اگه مقدار الکی هم ست بشه هدایت میشه به صفحه home پس بهتر بود همون اول چک میشد که مقدار ست شده اعتباری هم داره یانه
اگر هم قصد داشتین تو صفحه home این کارو انجام بدین که ظاهرا همین کارو هم انجام دادین که کد هاش موجود نبود پس نمیشد خیلی دقیق نظر داد راجع به صفحه home ولی در کل بهتر بود قبل از لاگین شدن و مطمعن شدن از درستیه اطلاعات وارد شده ، به هیچ وجه به صفحه home ریدایرکت و انجام نمیدادیم. موفق باشین
سلام مهندس شفیعی عزیز
یه سوال فنی میشه کاری کرد که دو کاربر که از یک موبایل و یک مرور گر استفاده میکنند رو تشخیص داد و بدون زدن پسورد لاگین بشن چنین کاری شدنی هست
راهنمایی بفرمائید
سلام مهندس شفیعی نازنین خدا قوت
این آموزش و چطور دانلود کنیم ؟
دانلود باکس نداره ؟
سلام. خیر باید طبق کدها و بر اساس کد قبلی ثبت نام و ورود کاربران بهش اضافه کنید
سلام مهندس شفیعی خسته نباشی برادر به کارت ادامه بده ما هم به برنامه نویسی علاقه داریم پیشرفت کن و به ما هم آموزش بده ممنون
سلام. ممنون.
بله حتما و امیدوارم هر روز, بهتر و ثبات قدم تر برای انتشار محتوای آموزشی در کنار مخاطبان عزیز باشیم.
موفق و موید باشید.
درود
من ۱۸ سالمه و به عنوان شاگرد شما این نظر رو مینویسم.
استفاده از ایدی و پسورد کاربر برای انجام این کار روش امنی نیست و باید توکن تولید کرد و در کوکی ذخیره کرد و با دیتابیس مطابقت داد.
سپاس از شما و مطالبتون.فقط کاش کمی تخصصی تر به مسائل میپرداختید.
با آرزوی موفقیت شما
سلام . خواهش میکنم خیلی لطف دارید شما .
این فقط یک مثال از نحوه پیاده سازی این قابلیت در صفحات وب است وگرنه روش های زیادی مثل همانطور که گفتید استفاده از توکن وجود داره که در بحث امنیت این کدها زمانی مشکل ساز خواهند بود که باگ xss یا مواردی مشابه آن در سایت وجود داشته باشد و یا اینکه هکر دسترسی مستقیم به کلاینت را پیدا کند ، در غیر اینصورت مساله جدی در این رابطه وجود ندارد ولی باز هم باید تدابیر امنیتی را در کد ها اعمال کرد .
به هر حال روش مطمین تر و ایمنی را جایگزین کردیم تا کاربران با خیال راحت از کد ها در پروژه هایی که می نویسند استفاده کنند.
خیلی ممنونم . موفق باشید .