Grustin
@Grustin
Начинающий программист

Можете прокомментировать код авторизации на PHP?

Можете подробно объяснить этот код? HTML код можете сильно не комментировать, он мне немного понятен.
<?PHP session_start(); 

$login = 'login';
$pass = 'pass';
$email = 'v@c.ru';

if($_GET['logout'] == true) {
    setcookie("loggedIn", "false", time() - 3600);
    setcookie("PHPSESSID", "", time() - 3600);
    setcookie("login", "", time() - 3600);
    header('Location: ' . $_SERVER['PHP_SELF']);
    session_destroy();
}

if($_POST['submit']) {
    $data['login'] = $_POST['login'] == $login ? $_POST['login'] : false;
    $data['pass'] = $_POST['password'] == $pass ? $_POST['password'] : false;
    $data['email'] = $_POST['email'] == $email ? $_POST['email'] : false;

    foreach($data as $key => $value) {
            If(!$value) $error[] = $key;
    }

    if(empty($error)) {
            setcookie('loggedIn', true);
            setcookie('PHPSESSID', session_id());
            setcookie('login', $data['login']);
            session_start();
            header('Location: ' . $_SERVER['PHP_SELF']);
    }
    else {
            print_r($error);
    }
}

if($_COOKIE['loggedIn']) : ?>
<p>Hello, <?= $_COOKIE['login']; ?></p>
<a href="<?= $_SERVER['PHP_SELF']; ?>?logout=true">logout</a>
<?PHP else : ?>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="post">
    <label>login</label><input type="text" name="login" required><br>
    <label>password</label><input type="password" name="password" required><br>
    <label>email</label><input type="email" name="email" required><br>
    <input type="submit" name="submit" value="login">
</form>
<?PHP endif; ?>
  • Вопрос задан
  • 162 просмотра
Решения вопроса 2
@DanKud
<?PHP session_start(); /* начинается новая сессия */

/* список переменных */
$login = 'login';
$pass = 'pass';
$email = 'v@c.ru';

/* если отправлен $_GET-параметр 'logout' то осуществляется процесс выхода из аккаунта
при этом удаляются куки и закрывается сессия */
if($_GET['logout'] == true) {
    setcookie("loggedIn", "false", time() - 3600); /* удаление куков */
    setcookie("PHPSESSID", "", time() - 3600);
    setcookie("login", "", time() - 3600);
    header('Location: ' . $_SERVER['PHP_SELF']); /* обновление страницы без $_GET-параметров */
    session_destroy(); /* закрывается сессия */
}

/* если отправлен $_POST-параметр 'submit' осуществляется процесс входа в аккаунт */
if($_POST['submit']) {
/* создается массив с входными данными по условиям */
    $data['login'] = $_POST['login'] == $login ? $_POST['login'] : false;
/* условие: если $_POST['login'] == 'login' то в массив $data['login'] присваивается
значение $_POST['login'], иначе false */
    $data['pass'] = $_POST['password'] == $pass ? $_POST['password'] : false;
    $data['email'] = $_POST['email'] == $email ? $_POST['email'] : false;

/* циклом проверяются входные значения */
    foreach($data as $key => $value) {
/* если какому-то значению в массиве присвоилось false, то ключ массива заносится в массив $error,
например пользователь не указал е-мейл тогда в $data['email'] записалось false и в
массиве $error мы будем иметь значение 'email' */
            If(!$value) $error[] = $key;
    }

/* если массив $error пустой и ошибок нет то сохраняем куки */
    if(empty($error)) {
            setcookie('loggedIn', true); /* записываем куки */
            setcookie('PHPSESSID', session_id());
            setcookie('login', $data['login']);
            session_start(); /* начинаем сессию */
            header('Location: ' . $_SERVER['PHP_SELF']); /* обновляем страницу */
    }
    else {
/* если массив $error НЕ пустой и ошибки были, то не входим в аккаунт и выводим
массив $error и видим какое поле выдало ошибку */
            print_r($error);
    }
}

/* если куки 'loggedIn' == true и вход выполнен, то отображать приветствие
для пользователя и кнопку выхода */
if($_COOKIE['loggedIn']) : ?>
<p>Hello, <?= $_COOKIE['login']; ?></p>
<a href="<?= $_SERVER['PHP_SELF']; ?>?logout=true">logout</a>

/* иначе, если вход не выполнен, отображать форму для входа в аккаунт */
<?PHP else : ?>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="post">
    <label>login</label><input type="text" name="login" required><br>
    <label>password</label><input type="password" name="password" required><br>
    <label>email</label><input type="email" name="email" required><br>
    <input type="submit" name="submit" value="login">
</form>
<?PHP endif; ?>
Ответ написан
Cначала задаются переменные:
$login = 'login';
$pass = 'pass';
$email = 'v@c.ru';

Если не вошел - работа с куки и установки сессии:
if($_GET['logout'] == true) {
    setcookie("loggedIn", "false", time() - 3600);
    setcookie("PHPSESSID", "", time() - 3600);
    setcookie("login", "", time() - 3600);
    header('Location: ' . $_SERVER['PHP_SELF']);
    session_destroy();
}

Проверка, совпадают ли введенные данные:
if($_POST['submit']) {
    $data['login'] = $_POST['login'] == $login ? $_POST['login'] : false;
    $data['pass'] = $_POST['password'] == $pass ? $_POST['password'] : false;
    $data['email'] = $_POST['email'] == $email ? $_POST['email'] : false;

    foreach($data as $key => $value) {
            If(!$value) $error[] = $key;
    }

Если человек вошел - объявляется в куки. Запись, что он онлайн и ID сессии. Иначе - он не вошел.
if(empty($error)) {
            setcookie('loggedIn', true);
            setcookie('PHPSESSID', session_id());
            setcookie('login', $data['login']);
            session_start();
            header('Location: ' . $_SERVER['PHP_SELF']);
    }
    else {
            print_r($error);
    }

И далее, если пользователь вошел, кнопка Loginout, а если не вошел - форма входа.
if($_COOKIE['loggedIn']) : ?>
<p>Hello, <?= $_COOKIE['login']; ?></p>
<a href="<?= $_SERVER['PHP_SELF']; ?>?logout=true">logout</a>
<?PHP else : ?>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="post">
    <label>login</label><input type="text" name="login" required><br>
    <label>password</label><input type="password" name="password" required><br>
    <label>email</label><input type="email" name="email" required><br>
    <input type="submit" name="submit" value="login">
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы