48
تشکر

اضافه کردن گزینه “مرا به خاطر بسپار” در فرم لاگین

PHP – پی اچ پی

PHP – پی اچ پی

اگر از سشن (Session) در PHP برای ذخیره اطلاعات کاربر و شناسایی کاربر لاگین کرده از کاربری که لاگین نکرده است استفاده میکنید، حتما میدانید که با بستن مرورگر توسط کاربر سشن به پایان میرسد و زمانی کاربر دوباره به سایت شما می آید باید دوباره لاگین بکند.

این مشکل در سشن را توسط گزینه ای به نام “مرا به خاطر بسپار”، “remember me” در فرم لاگین مرتفع میکنیم. با استفاده از این گزینه کاربر حتی اگر مرورگر را ببندد و دوباره به سایت مراجعه کند میبیند که از قبل لاگین شده است و نیازی به انجام دوباره این کار نیست.

در ادامه همراه ما باشید…

نحوه این کار به این صورت است که اگر کاربر در زمان لاگین گزینه “مرا به خاطر بسپار” را چک کرده بود (خط 2)، ما ابتدا یک عبارت هش شده تصادفی تولید میکنیم (خط 3)، سپس آن را در رکورد کاربر و در فیلد random_hash در دیتابیس ذخیره میکنیم (خط 4 تا 6 با استفاده از PDO، شما میتوانید از خود mysql_query استفاده کنید)، سپس همین عبارت هش شده تصادفی را به عنوان کوکی در سیستم کاربر دخیره میکنیم (خط 7).

خط 1 در کد پایین نشانه ای برای ماست که بفهمیم کاربر لاگین کرده است.

$_SESSION['user_loggedin'] = 1;
if(isset($_POST['remember'])) {
  $random_hash = substr(md5(microtime()), 0, 20);
  $sql = "update user set random_hash ='$random_hash' where email = '$email'";
  $stmt = $dbh->prepare($sql);
  $stmt->execute();
  setcookie("random_hash", $random_hash, time() + 3600 * 24 * 7, "/");
}

در کد بالا و در خط 7 ما زمان انقضای کوکی را هفت روز آینده تعیین کردیم. به این صورت که مثلا اگر کاربر تا شش روز آینده به سایت نیاید اما در روز هفتم وارد سایت شود باز هم نیازی به لاگین کردن ندارد.

خوب هنوز کار به پایان نرسیده است. باید علاوه بر کد بالا کدی بنویسیم که هر بار کاربر سایت را باز کرد ابتدا چک کنیم که آیا کوکی که در هنگام لاگین، در سیستم کاربر ذخیره کردیم، هنوز موجود است یا خیر (خط 1)، اگر کوکی موجود بود، عبارت هش شده ای که در کوکی ذخیره کردیم را در دیتابیس جستجو میکنیم که ببینیم برای کدام کاربر است (خط 2 و 3)، اگر کاربر مورد نظر را پیدا کردیم (خط 4)، نشانه ای که به ما میگوید کاربر لاگین کرده است را مقداردهی میکنیم (خط 5 و 6).

if(isset($_COOKIE['random_hash'])) {
  $stmt = $dbh -> query("select * from user where random_hash = '" . $_COOKIE['random_hash'] . "'");
  $row = $stmt -> fetch();
  if($stmt -> rowCount() > 0 ) {
   $_SESSION['user_loggedin'] = 1;
   $_SESSION['user'] = $row['email'];
  }
}

کد بالا باید در جایی قرار بگیرد که هر صفحه ای که کاربر در سایت باز کرد، کد بالا هم اجرا شود مانند صفحه config.php .

در نمونه بالا ما فقط اصول و پایه کار را آموزش دادیم شما میتوانید امنیت آن را بسته به نظر خودتان بالاتر ببرید. مثلا میتوانید طول عبارت هش شده تصادفی را زیاد یا با یکی از مشخصات یکتای کاربر تلفیق کنید، و گزینه های دیگر…


نظرات این مطلب بسته است.