آموزش ساخت پنل کاربری در php ثبت نام ، ورود ، فراموشی رمز عبور ، تایید ایمیل کاربر

آموزش ساخت پنل کاربری در php ثبت نام ، ورود ، فراموشی رمز عبور ، تایید ایمیل کاربر

آموزش ساخت پنل کاربری در php که شامل ثبت نام کاربر، ورود کاربر ، فراموشی رمز عبور، تایید کاربر بر اساس ایمیل است را با هم خواهیم ساخت .

این پروژه ی آموزشی شامل 8 بخش می باشد که به ترتیب :

1- ثبت نام کاربر با PHP و Mysql
2- تایید کاربر بر اساس ایمیل با PHP و Mysql
3- فرم لاگین (login) کاربر با PHP و Mysql
4- ساخت صفحه پروفایل کاربر و ویرایش آن با PHP و Mysql
5- دریافت گراواتار کاربر با PHP
6- گزارش گیری کاربران با PHP و Mysql
7- ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql
8- کدنویسی خروج از حساب کاربری (Log-out) در PHP

برای درک بهتر می توانید لینک دانلود پروژه کامل پنل کاربری را دریافت کنید .


دقت داشته باشید که برای استفاده از حداکثر کارایی برنامه با PHP 7 + اجرا کرده و بر روی هاست و دامنه اجرا شود تا برای ارسال ایمیل با مشکل مواجه نشوید .

0- محدودیت دسترسی کاربران

در ابتدا 2 حالت وجود دارد
حالت اول کاربر وارد حساب کاربری خود شده باشد files_can_load_in_login
حالت دوم کاربر به صورت میهمان وارد files_can_load_in_guest

صفحات را با استفاده از action که در url داده می شود بارگذاری می کنیم


همچنین باید برای اولین که برنامه بارگذاری می شود table های مورد نظر را وارد دیتابیس کند از طریق فایل install.php

2 جدول وجود دارد :

1- users
2- user_token

users برای کاربران و مشخصات است و user_token برای token هایی که برای کاربر ساخته می شود .

define("DSPR", DIRECTORY_SEPARATOR);
define("ABSPATH", __DIR__ . DIRECTORY_SEPARATOR);
define("HTTP_ROOT", "http://{$_SERVER['SERVER_NAME']}");
define("WEBSITE_NAME" , str_replace(["http://" , "https://"] , "" , HTTP_ROOT));

require_once ABSPATH . "inc" . DSPR . "class-loader.php";

$db = new DB();

$file_list = scandir(ABSPATH);

if (in_array("install.php", $file_list)) {
	require_once ABSPATH . "install.php";
	header("Refresh: 1");
	exit();
}

date_default_timezone_set("Asia/Tehran");


$file_to_action = $_GET['action'] ?? "login";
$file_to_action .= ".php";

$all_files_can_load = ["view-profile.php", "list-users.php", "expire.php", "edit-profile.php", "forgot-password.php", "login.php", "signup.php", "verify.php", "new-password.php"];

$files_can_load_in_guest = ["forgot-password.php", "login.php", "signup.php", "verify.php", "new-password.php" , "view-profile.php"];

$files_can_load_in_login = [
	"edit-profile.php",
	"expire.php",
	"list-users.php",
	"view-profile.php"
];

$is_logged_in = UserVerify::verify_user_by_session();

$files_can_load = $is_logged_in ? $files_can_load_in_login : $files_can_load_in_guest;


if (in_array($file_to_action, $files_can_load))
	require_once $file_to_action;
elseif (in_array($file_to_action, $all_files_can_load)) {
	$direct_to = HTTP_ROOT;
	if ($is_logged_in) $direct_to = "{$direct_to}?action=view-profile";
	else $direct_to = "{$direct_to}?action=login";
	header("Location: {$direct_to}");
} else {
	header("HTTP/1.0 404 Not Found");
	echo "404";
}


1- ثبت نام کاربر با PHP و Mysql

public static function handler_signup()
  {
    $post_data = array_filter($_POST);

    if (4 <= count($post_data)) {

      # Validation

      $validate_fullname = Helper::validate_fullname($post_data['fullname']);
      $validate_email = filter_var($post_data['email'], FILTER_VALIDATE_EMAIL);
      $validate_username = preg_match("/^[a-zA-Z0-9]+([_.]?[a-zA-Z0-9])*$/", $post_data['username']);
      $is_valid = Helper::validate_password($post_data['password']);

      if (!$validate_fullname['is_valid'])
        $msg = "نام کامل معتبر نمی باشد";
      else if (!$validate_email)
        $msg = "ایمیل معتبر نمی باشد";
      else if (!$validate_username)
        $msg = "نام کاربری معتبر نمی باشد";
      else if ($post_data['password'] !== $post_data['re-password'])
        $msg = "رمزعبور وارد شده یکی نیست !";
      else if (!$is_valid)
        $msg = "رمزعبور معتبر نمی باشد";


      # check is username or email exist

      $post_data['username'] = strtolower($post_data['username']);
      $post_data['email'] = strtolower($post_data['email']);

      $is_username_exist = $GLOBALS['db']->row_exist(["table" => "users", "content" => "username=?", "types" => "s", "values" => [$post_data['username']]]);
      $is_email_exist = $GLOBALS['db']->row_exist(["table" => "users", "content" => "email=?", "types" => "s", "values" => [$post_data['email']]]);


      if ($is_email_exist)
        $msg = "این ایمیل از قبل انتخاب شده";
      else if ($is_username_exist)
        $msg = "این نام کاربری از قبل انتخاب شده";


      if (!empty($msg)) {
        $_GET['msg'] = $msg;
        return $post_data;
      }
    } else {
      if (empty($_GET['msg'])) {
        $_GET['msg'] = 'تمامی فیلد ها اجباری است !';
        return $post_data;
      }
    }

    $current_timestamp = time();
    $post_data['password'] = password_hash($post_data['password'], PASSWORD_BCRYPT);
    $inserted_id = $GLOBALS['db']->row_insert(["table" => "users", "content" => "(username , email , password , fullname , time_created , time_updated) VALUES (? , ? , ? , ? , ? , ?)", "types" => "ssssss", "values" => [$post_data['username'], $post_data['email'], $post_data['password'], $validate_fullname['validated'], $current_timestamp, '']]);

    if ($inserted_id) {
      $direct_to = HTTP_ROOT . "?action=verify&type=acc&username={$post_data['username']}";
      header("Location: {$direct_to}");
    } else
      $_GET['msg'] = 'خطا در ارتباط';


    return $post_data;
  }

در ابتدا ورودی های کاربر را اعتبار سنجی می کنیم و سپس در صورت که معتبر نبود پیغام مرتبط با آن را نمایش می دهیم در غیر اینصورت ادامه روند .

در قدم بعدی 2 ورودی کاربر یعنی ایمیل و نام کاربری که منحصر به فرد است را بررسی می کنیم در صورت که در پایگاه داده مان وجود داشت پیغام ایمیل یا نام کاربری از قبل وجود داشته را نمایش می دهیم .

در صورتی که بخش نهایی یعنی وارد کردن اطلاعات کاربر به دیتابیس رسید یعنی کاربر می تواند به راحتی ثبت نام کند و آن را به صفحه تایید ایمیل دایرکت می کنیم .

ثبت نام کاربر با PHP و Mysql
ثبت نام کاربر با PHP و Mysql


2- تایید کاربر بر اساس ایمیل با PHP و Mysql

public static function handler_verify_acc($get_data)
  {
 
    global $current_timestamp, $expire_timestamp;
 
    $is_username_confirmed = $GLOBALS['db']->row_exist(["table" => "users", "content" => "username=? AND verified=?", "types" => "ss", "values" => [$get_data['username'], 1]]);
 
    if (!$is_username_confirmed) {
 
      $acc_token = $get_data['token'] ?? false;
 
 
      // user visit auth page
      if (!empty($acc_token)) {
        $is_token_valid = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire and="" checked="?" token="?"," "types"=""> "sssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0, $acc_token]]);
        if ($is_token_valid) {
          $GLOBALS['db']->row_update(["table" => "user_token", "content" => "checked=? WHERE token=?", "types" => "ss", "values" => [1, $acc_token]]);
          $GLOBALS['db']->row_update(["table" => "users", "content" => "verified=? , time_updated=? WHERE username=?", "types" => "sss", "values" => [1, $current_timestamp, $get_data['username']]]);
          global $description_verify;
          $description_verify = ["title" => "فعال", "description" => "حساب کاربری تان با موفقیت فعال شد (:"];
        } else
          $_GET['msg'] = 'توکن داده شده معتبر نیست';
 
        return $get_data;
      }
 
 
      $is_token_generated = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire and="" checked="?" limit="" 1",="" "types"=""> "ssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0]]);
 
      $user_db_data = Helper::select_user_by_uname($get_data['username']);
      $user_db_data = $user_db_data[0];
 
 
      if (!$is_token_generated)
        UserVerify::verify_data_to_send($user_db_data, $get_data['username'], $get_data['type'], $current_timestamp, $expire_timestamp, "تایید حساب کاربری در رپید کد");
    } else
      $_GET['msg'] = "حساب کاربری تان از قبل تایید شده است";
 
    return $user_db_data ?? false;
  }

ابتدا بررسی می کنیم که آیا کاربر از طریق لینکی که به ایمیل آن ارسال شده آمده ، که اگر اینطور بود token آن را بررسی کند دقت داشته باشید که توکن داده شده تا 1 ساعت معتبر است .

در صورتی که کاربر به تازگی از صفحه sign up هدایت شده بررسی می کنیم از قبل توکن معتبر برای آن ساخت شده یا خیر ، در صورتی که وجود داشت آن را به ایمیل ارسال می کنیم در صورت که وجود نداشته یکی ساخت و ارسال می کنیم .

تایید کاربر بر اساس ایمیل با PHP و Mysql
تایید کاربر بر اساس ایمیل با PHP و Mysql


3- فرم لاگین (login) کاربر با PHP و Mysql

public static function handler_login()
  {
    $post_data = array_filter($_POST);
    if (!empty($post_data['username']) && !empty($post_data['password'])) {
      $remember_check = !empty($post_data['remember']) && $post_data['remember'] === "yes" ? true : false;
      $user_db_data = Helper::select_user_by_uname($post_data['username']);
      $user_db_data = $user_db_data ? $user_db_data : Helper::select_user_by_email($post_data['username']);

      if ($user_db_data) {
        $user_db_data = $user_db_data[0];
        $user_valid = password_verify($post_data['password'], $user_db_data['password']);
        if ($user_valid) {
          $is_user_confirmed = boolval($user_db_data['verified']);
          if ($is_user_confirmed) {
            $current_timestamp = time();
            $expire_timestamp = null;
            $days = 90;
            $username = $user_db_data['username'];

            if ($remember_check) $expire_timestamp = $current_timestamp + 86400 * $days;

            $token_db = $GLOBALS['db']->row_select(["table" => "user_token", "content" => "type=? AND ?<time_expire AND username=? LIMIT 1", "types" => "sss", "values" => ['user_session', $current_timestamp, $username]]);

            $session_token = false;

            if ($token_db) {
              $session_token = $token_db[0]['token'];
            } else {
              $session_token = UserVerify::set_user_session_db($username,$current_timestamp, $expire_timestamp, $days); 
            }

            $user_token = ["username" => $username, "session_token" => $session_token , "expire" => $expire_timestamp];
            $user_token = json_encode($user_token);

            UserVerify::set_user_session($user_token, $expire_timestamp);

            $direct_to = HTTP_ROOT . "?action=view-profile";
            header("Location: {$direct_to}");
          } else {
            $_GET['msg'] = "حساب کاربری ثبت گردیده اما تایید نشده برای تایید می توانید از فراموشی رمزعبور استفاده کنید";
          }
        } else
          $_GET['msg'] = "نام کاربری یا رمزعبور صحیح نمی باشد";
      } else
        $_GET['msg'] = "نام کاربری یا رمزعبور صحیح نمی باشد";
    } else if (!empty($post_data['test'])) {
      $_GET['msg'] = "نام کاربری یا رمزعبور وارد نشده";
    }
  }

ابتدا کاربر را با استفاده از email یا username در دیتابیس جستجو می کنیم در صورتی که یافت شد رمز ورود آن را بررسی می کنیم اگر صحیح بود ادامه روند .

بعد از آن می رسیم به این که آیا کاربر ایمیل خود را تایید کرده است یا خیر در صورتی که تایید کرده بود یک session با مدت اعتبار 90 روز برای کاربر در دیتابیس می سازیم .

همچنین اگر کاربر تیک “مرا به خاطر بسپار” را زده بود کوکی را تا 90 روز تایید می کنیم در غیر اینصورت به صورت session آن می سازیم که در صورت بسته شدن مرورگر پاک شود .

دقت داشته باشید که در هر بار بارگذاری صفحه کوکی های کاربر که شامل session_token می باشد را در فایل index.php با کمک متود UserVerify::verify_user_by_session بررسی می کنیم .

فرم لاگین (login) کاربر با PHP و Mysql
فرم لاگین (login) کاربر با PHP و Mysql


4- ساخت صفحه پروفایل کاربر و ویرایش آن با PHP و Mysql به همراه 5- دریافت گراواتار کاربر با PHP

پروفایل کاربر

public static function handler_view_profile()
  {
    $user_data = ['date_register' => '', 'fullname' => '', 'username' => '', 'email' => '', 'is_user_profile' => false];

    if (isset($_GET['uname'])) {
      $uname = $_GET['uname'];
    } else if (!empty($GLOBALS['temp_user_data'])) {
      $user_tmp = $GLOBALS['temp_user_data'];
      $uname = $user_tmp['uname'];
      $user_data['is_user_profile'] = true;
    } else {
      $_GET['msg'] = "کاربر داده شده معتبر نیست";
      return false;
    }


    $user_db_data = Helper::select_user_by_uname($uname);
    if ($user_db_data) {
      $user_db_data = $user_db_data[0];
      $user_data['date_register'] = date("Y/m/d | H:i:s", intval($user_db_data['time_created']));
      $user_data['fullname'] = $user_db_data['fullname'];
      $user_data['username'] = $user_db_data['username'];
      $user_data['email'] = $user_db_data['email'];
    } else {
      $_GET['msg'] = "کاربر مورد نظر یافت نشد";
      return false;
    }

    return $user_data;
  }

پروفایل کاربر شامل 3 بخش است :

1- نام کاربری
2- نام کامل
3- تاریخ ثبت نام

از خط 5 تا 14 : uname همان username به صورت مختصر است .
در شرط اول بررسی می کنیم که آیا نام کاربری از طریق query string به نام uname داده شده است .
در شرط دوم بررسی می کنیم که آیا uname از طریق cookie های کاربر وارد شده اگر شرط true بود is_user_profile را true می دهیم تا لینک ویرایش و خروج از حساب را فعال کنیم .
آخرین شرط در صورتی که uname دریافت نکردیم پیغام خطای مورد نظر را چاپ می کنیم .

نام کاربری را در دیتابیس جستجو کرده و در صورتی که یافت شده تاریخ ثبت نام را با فرمت دلخواه باسازی می کنیم در غیر اینصورت پیغام کاربر مورد نظر یافت نشد را می دهیم .

ساخت صفحه پروفایل کاربر در PHP
ساخت صفحه پروفایل کاربر در PHP


پیدا کردن گراواتار کاربر بر اساس ایمیل

آموزش ساخت پنل کاربری در php

$user_email_hash = md5(strtolower(trim($user_data['email'])));
$user_gravatar = "https://secure.gravatar.com/avatar/{$user_email_hash}?s=80&d=mm";

user_email_hash همان ایمیل کاربر است که که هش شده و با استفاده از secure.gravatar.com/avatar آن را دریافت می کنیم .
s? اندازه تصویر است و d در صورتی که تصویر یافت نشد پیشفرض چه تصویری برگرداند

ویرایش پروفایل کاربر

شامل 4 بخش است :

1- نام کامل
2- رمز فعلی
3- رمز جدید
4- تکرار رمز جدید

در صورتی که یکی از 3 رمزعبور پر شود باید رمز فعلی صحیح باشد و رمز جدید و تکرار آن معتبر و مطابق هم باشد .

public static function handler_edit_profile()
  {
    $username = $GLOBALS['temp_user_data']['uname'];
    $expire_timestamp_session = $GLOBALS['temp_user_data']['expire'];

    $user_db_data = $GLOBALS['db']->row_select(["table" => "users", "content" => "username=? LIMIT 1", "types" => "s", "values" => [$username]]);
    $user_db_data = $user_db_data[0];

    $password = $user_db_data['password'];
    $fullname = $user_db_data['fullname'];

    $post_data = $_POST;
    $prefix_msg = "عدم بروزرسانی اطلاعات : ";
    $msg = "";
    $password_changed = false;

    if (!empty($post_data['fullname'])) {

      $validate_fullname = Helper::validate_fullname($post_data['fullname']);


      if (!empty($post_data['password']) || !empty($post_data['new-password']) || !empty($post_data['re-new-password']))
        $password_changed = true;

      if (!$validate_fullname['is_valid'])
        $msg = "نام کامل معتبر نیست";
      elseif ($password_changed && (empty($post_data['password']) || empty($post_data['new-password']) || empty($post_data['re-new-password'])))
        $msg = "هر 3 ورودی رمز را کامل وارد کنید";
      elseif ($password_changed && !password_verify($post_data['password'], $password))
        $msg = "رمز فعلی صحیح نمی باشد";
      elseif ($password_changed && $post_data['new-password'] !== $post_data['re-new-password'])
        $msg = "رمزعبور جدید با تکرار آن همخوانی ندارد";
      elseif ($password_changed && !Helper::validate_password($post_data['new-password']))
        $msg = "رمزعبور جدید معتبر نیست";
      else {

        $current_timestamp = time();
        

        if ($password_changed) {
          $password = password_hash($post_data['new-password'], PASSWORD_BCRYPT);
          $expire_timestamp_session = is_null($expire_timestamp_session) ? null : $expire_timestamp_session;
          $db_days = 90;
          Helper::invalid_session_token_db($username);
          $session_token = UserVerify::set_user_session_db($GLOBALS['temp_user_data']['uname'],$current_timestamp, $current_timestamp + 86400 * $db_days , $db_days);
          $user_token = ["username" => $username, "session_token" => $session_token , "expire"=> $expire_timestamp_session];
          $user_token = json_encode($user_token);
          UserVerify::set_user_session($user_token, $expire_timestamp_session);
        }

        $fullname = $validate_fullname['validated'];

        $GLOBALS['db']->row_update(["table" => "users", "content" => "fullname=? , password=? , time_updated=? WHERE username=?", "types" => "ssss", "values" => [$fullname, $password, $current_timestamp, $username]]);

        $prefix_msg = "موفق : ";
        $msg = "تغییرات با موفقیت اعمال شد";
      }
    } else
      $msg = "نام کامل خالی است";



    if ($msg && !empty($post_data['test']))
      $_GET['msg'] = $prefix_msg . $msg;

    return $fullname;
  }

در صورتی که رمز عبور جدید ثبت گردید session قبلی کاربر را نامعتبر و یک session جدید می سازد .

ساخت صفحه ویرایش پروفایل کاربر در PHP
ساخت صفحه ویرایش پروفایل کاربر در PHP


6- گزارش گیری کاربران با PHP و Mysql

public static function handler_list_users()
  {

    $list_users = [];

    if (isset($GLOBALS['temp_user_data'])) {
      $users = $GLOBALS['db']->row_select(["table" => "users", "content" => "1=? ORDER BY `id` ASC", "types" => "s", "values" => [1]]);

      foreach ($users as $user) {
        $list_users[] = $user;
      }
    } else
      $_GET['msg'] = "برای مشاهده کاربران وارد شوید";

    return $list_users;
  }
گزارش گیری کاربران با PHP و Mysql
گزارش گیری کاربران با PHP و Mysql

آموزش ساخت پنل کاربری در php

7- ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql

public static function handler_verify_acc_reset($get_data)
  {
    global $current_timestamp, $expire_timestamp;

    $acc_reset_token = $get_data['token'] ?? false;

    if (!empty($acc_reset_token)) {
      $is_token_valid = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire AND checked=? AND token=?", "types" => "sssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0, $acc_reset_token]]);
      if ($is_token_valid) {
        $GLOBALS['db']->row_update(["table" => "user_token", "content" => "checked=? WHERE token=?", "types" => "ss", "values" => [1, $acc_reset_token]]);
        $user_db_data = Helper::select_user_by_uname($get_data['username']);
        $user_email = $user_db_data[0]['email'];
        $token = UserVerify::generate_token($user_email, $current_timestamp);
        $expire_timestamp = $current_timestamp + 300;
        $GLOBALS['db']->row_insert(["table" => "user_token", "content" => "(type , username , token , time_created , time_expire , time_sent) VALUES (? , ? , ? , ? , ? , ?)", "types" => "ssssss", "values" => ['npwd', $get_data['username'], $token, $current_timestamp, $expire_timestamp, $current_timestamp]]);

        $direct_to = HTTP_ROOT . "?action=new-password&token={$token}";
        header("Location: {$direct_to}");
      } else
        $_GET['msg'] = 'توکن داده شده معتبر نیست';

      return $get_data;
    }


    $is_token_generated = $GLOBALS['db']->row_exist(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire AND checked=? LIMIT 1", "types" => "ssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0]]);
    $user_db_data = Helper::select_user_by_uname($get_data['username']);
    $user_db_data = $user_db_data[0];


    if (!$is_token_generated)
      UserVerify::verify_data_to_send($user_db_data, $get_data['username'], $get_data['type'], $current_timestamp, $expire_timestamp, "بازگردانی رمزعبور در رپید کد");
    else {
      $token_db = $GLOBALS['db']->row_select(["table" => "user_token", "content" => "username=? AND type=? AND ?<time_expire AND checked=? LIMIT 1", "types" => "ssss", "values" => [$get_data['username'], $get_data['type'], $current_timestamp, 0]]);
      $token = $token_db[0];
      $temp_next_request = intval($token['time_sent']);
      $next_request = $current_timestamp - $temp_next_request;
      $time_per_request = 1200;

      if ($next_request < $time_per_request) {
        $temp_next_request = $temp_next_request + $time_per_request;
        $temp_next_request = date("H:i:s ⏺ Y/m/d", $temp_next_request);
        $_GET['msg'] = "امکان ارسال مجدد درخواست از {$temp_next_request} به بعد وجود دارد";
        return;
      }
      $token = $token['token'];
      $GLOBALS['db']->row_update(["table" => "user_token", "content" => "time_sent=? WHERE token=?", "types" => "ss", "values" => [$current_timestamp, $token]]);
      $link = UserVerify::verify_link($get_data['username'], $get_data['type'], $token);
      UserVerify::send_mail(1, $get_data['type'], $user_db_data['email'], "بازگردانی رمزعبور در رپید کد", $user_db_data['fullname'], $link);
    }

    global $description_verify;
    $description_verify = ["title" => "تایید ایمیل", "description" => "جهت بازگردانی رمزعبور ایمیل خود را بررسی کنید ( لینک ارسال شده تا 1 ساعت معتبر است )"];


    return $user_db_data ?? false;
  }

1- در ابتدا بررسی می کنیم که آیا کاربر با لینک داده شده به ایمیل به این صفحه میاد با استفاده از query string که برای token تعریف کردیم . در صورتی که معتبر بود یک token جدید با اعتبار 5 دقیقه ساخته و به فرم تغییر رمز جدید ارسال می کنیم ( کاربر 5 دقیقه وقت دارد تا رمز جدیدی انتخاب کند )

2- در صورتی که کاربر برای اولین درخواست بازگردانی رمز جدید می کند توکن برای آن ساخته و ارسال می شود.

3- اما اگر برای دومین بار کاربر درخواست بازگردانی رمز جدید می کند از آخرین ارسال ایمیل اگر 20 دقیقه گذشته بود مجدد لینک بازگردانی برای آن ایمیل شود در غیر اینصورت از زمان آخرین ارسال ایمیل باید 20 دقیقه بگذرد تا بتواند درخواست جدید ثبت کند .

ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql
ساخت سیستم بازیابی رمزعبور کاربر با PHP و Mysql


8- کدنویسی خروج از حساب کاربری (Log-out) در PHP

public static function remove_auth_session()
{
 setcookie('auth_token', '', time() - 3600);
}
Helper::remove_auth_session();
$direct_to = HTTP_ROOT . "?action=login";
header("Location: {$direct_to}");

کوکی auth_token که برای اعتبارسنجی کاربر است را پاک کرده و به صفحه ورود ارجاع می دهیم .

کدنویسی خروج از حساب کاربری (Log-out) در PHP
کدنویسی خروج از حساب کاربری (Log-out) در PHP


قبل از استفاده وارد پوشه inc شده و فایل db.php را متناسب با سرور تان تنظیم کنید .

دانلود پروژه پنل کاربری حرفه ای در PHP

آموزش ساخت پنل کاربری در php

ارسال نظر

لیست نظرات

  1. سید محمد علی حسینی
    سید محمد علی حسینی

    سلام.دوست عزیز امکان داره برام تو هاستم نصب کنید

    26 مرداد 1399 | 14:47:04