Что нового

Авторизация на сайте (php) (1 Viewer)

pipulas

pipulas

Посетитель
OLD SkripTers
Регистрация
17 Дек 2019
Сообщения
1,088
Реакции
9
Всем привет, решил я сделать авторизацию на своем одном проекте, до этого делал уже простенькую.
Вот код:
PHP:
<?php
session_start();

# Если на indexp.php поступили POST данные с логином и паролем :
if ( isset( $_POST['user_id'], $_POST['pass'] ) )
{
    # Создаем соединение с базой данных :
    $db = new SafeMySQL( $db_config );
    
    # Ищем человека в базе данных :
    $user = $db->getRow( 'SELECT * FROM users WHERE ok_id=?s', $_POST['user_id'] );
    
    # Если находим такого в базе, то сверяем пароль :
    if ( !empty( $user ) )
    {
        # Если пароль верный :
        if ( $user['pass'] == $_POST['pass'] )
        {
            # Заноисм данные в сессию :
            $_SESSION['auth'] = '1';
            $_SESSION['user_id'] = $_POST['user_id'];
            $_SESSION['auth_key'] = md5( $_POST['user_id'].'_'.$app_secret_key );
            
        } else {
            
            # Если пароль не верный, перекидываем на страницу с ошибкой :
            require_once ('error.php');
            exit();
            
        }
        
    } else {
        
        # Если не находим такого в базе, перекидываем на страницу с ошибкой :
        require_once ('error.php');
        exit();
    }
}

# Если на indexp.php поступили GET данные со значением logout (Выход) :
if ( isset( $_GET['logout'] ) )
{
    # Очищаем массив сессии :
    $_SESSION = array();
    
    # Обновляем страницу :
    header( 'Location: /' );
}


# Проверяем авторизован ли пользователь :
if ( !isset( $_SESSION['auth'] ) )
{
    # Если не авторизован, то выводим форму авторизации :
    require_once ('auth.php');
    
}

# Если пользователь авторизован :
if ( isset( $_SESSION['auth'] ) )
{
    # Создаем соединение с базой данных :
    $db = new SafeMySQL( $db_config );

    # Ищем человека в базе данных :
    $user = $db->getRow( 'SELECT * FROM users WHERE ok_id=?s', $_SESSION['user_id'] );

    if ( $user['banned'] == '0' )
    {
        # Если не забанен, выводим главную страницу :
        require_once ('main.php');
        
    } else {
        
        # Если забанен, говорим что пользователь заблокирован :
        require_once ('banned.php');
        
    }
}
Код в принципе работает, авторизует. Вопрос как правильно реализовать чтобы, авторизация сохранялась продолжительное время, месяц - два. А то она слетает после перезапуска браузера. И как вообще код реализован, правильно не правильно, писал сам, в php не гуру))
 
ты пишешь на сессиях если бы использовал куки то примерно так
setcookie('cookie_name', serialize($get_cook), strtotime("+30 day")); // жизнь куков 30 дней
а если хочешь продлить сессии то примерно смотри на эти параметры в конфигурации php.ini , .htaccess , ini_set()
session.gc_maxlifetime
session.cookie_lifetime
 
Да, вчера почитал, разобрался как увеличить время сессии и время жизни cookie. Но пишут что ссессию лучше не трогать, на то она и сессия. Получается лучше работать через cookie. Но тогда как лучше реализовать этот алгоритм? Хранить какой то токен-ключ в cookie, и этот же токен привязать к пользователю в БД. И при заходе пользователя на сайт, считывать его токен, искать по нему в бд, стартовать новую сессию и записывать в неё новые данные.

Безопасен ли такой способ, как вообще реализуется вечная авторизация на сайте, пока человек сам не выйдет?
 
вечная авторизация очень плохое решение ведь можно получить куки и ими воспользоваться и сразу надо понять как хочешь чтоб было поддержка разных устройств к приему один и тот же пользователь может быть авторизован на разных устройств, а возможна одна авторизация на одном устройстве.
 
Ну на том же ВК или ВБ, авторизация не слетает. Там поддержка с разных устройств. Мне впринципе без разницы, с разных или с одного, я хочу понять принцип, алгоритм, как правильно делать. Какую информацию хранить в куках, как её шифровать, и как её использовать. Сервис у меня не большой, делаю PWA сайт с ботом который играет в одну игру в вк, людей ограниченный круг, не думаю что кто то будет воровать куки))
 

Пользователи, просматривающие данную тему

Верх