آموزش ساخت پنل کاربری در 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

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

لیست نظرات

  1. محیاخانی
    محیاخانی

    تمام توضیحات عالی بود

    28 اسفند 1402 | 14:33:26
  2. ساشا
    ساشا

    سلام. خسته نباشید من فایل رو اجرا کردم اطلاعات در دیتابیس ثبت میشه اما خطا در ارتباط میده و ایمیل اعتبار سنجی ارسال نمیشه. یه سوال دیگه هم داشتم برای ثبت نام آی دی رو در فایل class-db صفر تعیین کردین حالا اگه دونفر باهم ثبت نام کنن و ایمیل تایید رو نزنن کلا ارور میده !

    10 دی 1402 | 13:13:25
  • حسین باقری
    حسین باقری

    درود ، ساشا در مقاله هم ذکر شده که حتما باید از هاست واقعی برای تست ارسال ایمیل در برنامه استفاده کنید البته بعضی از هاستینگ ها تابع mail به درستی کار نمی کنه که باید از PHPMailer استفاده کنید . اون عدد صفر یعنی ایمیل تایید نشده ، اگر بخشی اعتبار سنجی ایمیل تکمیل بشه برنامه باید به درستی کار کنه .

    10 دی 1402 | 18:26:22
  • ffarshadi
    ffarshadi

    بسیار عالی

    11 شهریور 1402 | 12:46:48
  • حسین
    حسین

    سلام و ممنون خیلی ممنون از آموزش کامل و خوبتون من سورس کد رو دانلود کردم ولی ارور PHP network db.class line12رو میده ممنون میشم راهنمایی کنید MySQL فعال هستش MyphpAdmin درست کار میکنه ولی ارور PHP network db.class line 12رو میده جدول ها هم ساختم و درست هستش PHP network db.class line 12 چی هست این؟؟؟

    26 مرداد 1402 | 13:36:03
    • حسین باقری
      حسین باقری

      درود ، دلایل خطا می تونه یکی یا چندی از این موارد باشه :

      • هاست localhost یا 127.0.0.1 نیست
      • نام کاربری یا رمز عبور اشتباه هست
      • دیتابیس انتخابی وجود ندارد یا اگر وجود دارد کاربر انتخابی اجازه دسترسی به آن را ندارد
      • پورت انتخابی معمولا روی 3306 هست اما در سیستم شما برای عدد دیگری هست
      27 مرداد 1402 | 00:15:44
  • حسین
    حسین

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

    23 مرداد 1402 | 21:48:40
  • مهدیار
    مهدیار

    سلام من میخواهم سایت فروشگاه اینترنتی بسازم که که صفحه لاگین داشته باشد که وقتی کاربر در آن لاگین می‌کند در صفحه خودش هدایت شود و وارد پروفایل کاربری خودش شود که بتواند در آن خدماتی مانند : خرید کردن ثبت آگهی اضافه کردن محصول به سبد خرید و... را انجام دهد کدی هست که به من در این زمینه کمک کند

    27 تیر 1402 | 19:53:05
    • حسین باقری
      حسین باقری

      درود ، این سیستمی که در نظر دارید یک فروشگاه اینترنتی هست که سیستم ثبت نام و لاگین فقط یک قسمت از اون حساب میشه .

      28 تیر 1402 | 11:09:37
  • محمد احسان
    محمد احسان

    سلام MySQL من فعال هست ولی این ارور رو میده :()MySQL__construc PHP_network_getaddres:getadrinfo No such host

    26 تیر 1402 | 15:29:13
    • حسین باقری
      حسین باقری

      درود ، فکر می کنم هاست mysql رو اشتباه دادید باید localhost یا 127.0.0.1 باشه .

      26 تیر 1402 | 21:14:13
  • محمد احسان
    محمد احسان

    سلام و ممنون خیلی ممنون از آموزش کامل و خوبتون من سورس کد رو دانلود کردم ولی ارور PHP network db.class line12رو میده ممنون میشم راهنمایی کنید

    24 تیر 1402 | 23:40:46
    • حسین باقری
      حسین باقری

      درود ، احتمالا mysql تون فعال نیست برای اینکه مطمئن بشید درست کار می کنه وارد آدرس http://localhost/phpmyadmin بشید اگر صفحه phpmyadmin رو مشاهده کردید یعنی mysql فعال هست .

      25 تیر 1402 | 12:50:10
  • amir
    amir

    سلام وقت بخیر . چطور میشه session رو همیشه آنلاین نگه داشت و با بسته شدن مرورگر یا قطع اینترنت و هرچیزی session استپ نشه و مجدد لاگین نخواد.

    22 اسفند 1401 | 19:46:06
    • حسین باقری
      حسین باقری

      به طور کلی زمانی که "مرا به خاطر بسپار" انتخاب می شه به صورت کوکی ذخیره میشه و اگر مرورگر بسته بشه و مجددا برگرده باز هم لاگین شده خواهد بود . البته توجه داشته باشید که نباید در حالت incognito یا privacy مرورگر باشید .

      28 اسفند 1401 | 15:23:13
  • Maryam
    Maryam

    من هنوز دوره رو ندیدم احازه دانلود بهم نمیده

    16 اسفند 1401 | 16:47:24
    • حسین باقری
      حسین باقری

      این دوره نیست بلکه سورس پنل کاربری برای PHP هست ، امکان دانلود وجود داره فقط باید ثبت نام سپس دانلود کنید ( سورس رایگان هست )

      16 اسفند 1401 | 19:02:02
  • amir
    amir

    سلام نوشته بودید با کاربر مهمان هم میشه وارد شد چکار باید کرد که این گزینه فعال بشه . و سوال دوم اینکه راهی داره که بشه فایلهارو تو روت هاست نصب نکرد و داخل فولدری برد ؟

    29 بهمن 1401 | 01:35:28
    • حسین باقری
      حسین باقری

      درود ، 1- در متغیر files_can_load_in_guest لیست فایل هایی می شه کاربر میهمان وارد اون بشه مثل فراموشی رمز عبور ، مشاهده پروفایل دیگر کاربران 2- بله میشه اما باید مطابق فولدری که تنظیم کردید url های داخل سورس رو تغییر بدید .

      29 بهمن 1401 | 14:40:03
  • ابوالفضل جبراییلی
    ابوالفضل جبراییلی

    خوب بود

    18 دی 1401 | 09:33:28
  • behzad
    behzad

    سلام وقت بخیر میشه فقط با یه ایمیل خاص بشه وارد شد مثلا ما یه سرویس ایمیل دهی خاص بزنیم که فقط با اون وارد بشن( نه با یاهو و جیمیل) ؟

    11 آبان 1401 | 13:09:49
    • حسین باقری
      حسین باقری

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

      11 آبان 1401 | 14:23:11
  • امین گل محمدی
    امین گل محمدی

    سلام ببخشید من فایل رو خواستم دانلود کنم و به صفحه ی ثبت نام منتقل شدم و پیام داد برای تایید ایمیل به سرویس ایمیل خود سر بزنید من چک کردم ولی هیچ ایمیلی در اینباکس و یا اسپم و درفت نبود چکار کنم؟

    28 فروردین 1401 | 00:08:26
    • حسین باقری
      حسین باقری

      این برنامه باید در root سرور نصب بشه و از example.com اجرا بشه دوم : اینکه روی هاست آنلاین باشه و کانفیگ ایمیل هاست فعال باشه .

      28 فروردین 1401 | 12:58:54
      • محمد احسان
        محمد احسان

        سلام وقت بخیر چگونه باید درون روت نصبش کنیم و کانفیگ ایمیل هاست رو فعال کنیم اگه به جیمیلم بفرستید ممنون میشم

        24 تیر 1402 | 23:48:13
        • حسین باقری
          حسین باقری

          در اکثر هاستینگ ها این قابلیت به طور پیشفرض فعال اگر فعال نیست باید تیکت بزنید تا براتون فعال اش کنند .

          25 تیر 1402 | 12:50:56
    contact us