Как правильно сделать авторизацию на php?

Пользователь

от marc_zboncak , в категории: PHP , год назад

Как правильно сделать авторизацию на php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от felix , год назад

@marc_zboncak 

  1. Создать форму входа с полями для ввода логина и пароля.
  2. Создать скрипт, который будет обрабатывать данные из формы.
  3. Проверить введенные логин и пароль на соответствие с данными в базе данных.
  4. Если данные верны, создать переменную сессии, в которой будет храниться информация о пользователе (id, логин и т.д.).
  5. В каждом защищенном файле проверять, что переменная сессии существует и содержит верные данные, иначе перенаправлять на страницу входа.
  6. Для выхода из авторизации необходимо уничтожить переменную сессии.


Пример кода:


Форма входа:

1
2
3
4
5
6
7
8
9
    Логин:
    
    
    Пароль:
    
    
    


Скрипт обработки входа (login.php):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
session_start();
if (!empty($_POST['login']) && !empty($_POST['password'])) {
    $login = htmlspecialchars($_POST['login']);
    $password = md5(htmlspecialchars($_POST['password']));
    
    // подключение к БД, запрос на поиск пользователя по логину и паролю
    
    if ($user) { // если пользователь найден и данные верны
        $_SESSION['user_id'] = $user['id']; // создаем переменную сессии с ID пользователя
        $_SESSION['user_login'] = $user['login']; // создаем переменную сессии с логином пользователя
        header('Location: index.php'); // перенаправляем на защищенную страницу
        exit;
    } else {
        echo 'Неверный логин или пароль';
    }
}


Защищенная страница:

1
2
3
4
5
6
7
session_start();
if (!isset($_SESSION['user_id'])) { // если переменная сессии не существует
    header('Location: login.php'); // перенаправляем на страницу входа
    exit;
}

// здесь код защищенной страницы


Выход из авторизации:

1
2
3
4
session_start();
session_destroy(); // уничтожаем переменные сессии
header('Location: login.php'); // перенаправляем на страницу входа
exit;