1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

[PHP] Класс авторизации.

Тема в разделе 'Веб', создана пользователем salitypw, 3 янв 2014.

  1. TopicStarter Overlay

    salitypw Программист Пользователи

    Сообщения:
    557
    Лайки:
    367
    Пол:
    Мужской
    Репутация:
    9
    Команда:
    BlooD PW x700
    Страна:
    Japan Japan
    Не знаю, может кому (кто не использует фреймворки) пригодится в WEB разработке. Основное отличие от привычных сессий - при большом количестве пользователей не нагружается файловая система WEB сервера (все хранится на стороне клиента).
    Внимание! Данные хранятся почти в открытом виде, так что будьте внимательны.
    Так же есть возможность "привязки" куков к клиенту (по IP и HTTP_USER_AGENT).
    Перед созданием объекта класса, в Вас должны быть инициализированы следующие именованные константы:
    AUTH_BIND_IP - (true или false): "Привязать" куки к клиенту по IP (true - да, false - нет).
    AUTH_BIND_HUA - (true или false): "Привязать" куки к клиенту по HTTP_USER_AGENT (true - да, false - нет).
    AUTH_BIND_DOMAIN - (true или false): "Привязать" куки к домену (true - да, false - нет).
    AUTH_KEY - (строка-ключ): Строка, которая используется при генерации контрольной хеш-суммы. (чем строка длиннее и "разнообразнее" - тем лучше).

    Собственно что это нам дает: даже если куки клиента угонят, то злоумышленник не сможет ими воспользоваться и войти под учетной записью того клиента, у кого были угнаны эти куки.

    Методы класса:
    1) SessionSetData($data, $expireTime); $data - отправляемые клиенту данные (строка, массив, целое число и т. д.), $expireTime - время "жизни" сессии. При отправке данные устанавливаются куки mvcboxauth_data и mvcboxauth_control_hash . Собственно mvcboxauth_data хранит сами данные, а mvcboxauth_control_hash хранит контрольную сумму этих данных.
    2) SessionCheckData(); Выполняет проверку подлинности данных и возвращает true в случае подлинности данных и false в обратном случае.
    3) SessionIsSet(); Проверяет существуют ли куки mvcboxauth_data и mvcboxauth_control_hash.
    4) SessionClose(); Закрывает текущую сессию.
    5) SessionGetData(); Получает данные.

    Напишем небольшой пример.

    Скрипт авторизации:
    PHP:
    <?php
    require_once 'cls_Auth.php';
    $Auth = new cls_Auth();

    /*
    *  Тут еще какой-то код...
    */

    if(!empty($_POST))
    {
        
    /* Тут у нас какой-то код, который проверяет логин и пароль */
        /* Допустим, что логин и пароль совпали. Выполняем авторизацию. В куках будем хранить ID пользователя. */
        
    $Auth->SessionSetData($userId);
    }

    ?>

    Проверка (авторизирован пользователь или нет)

    PHP:
    <?php
    require_once 'cls_Auth.php';
    $Auth = new cls_Auth();

    /*
    *  Тут еще какой-то код...
    */

    if($Auth->SessionIsSet())
    {
        if(
    $Auth->SessionCheckData())
        {
          echo 
    'Добро пожаловать, Ваш ID: '.$Auth->SessionGetData();
        }
        else
        {
          
    $Auth->SessionClose();
          die(
    'Обнаружена подмена данных!');
        }
    }
    else
    {
    die(
    'Вы не авторизированы!');
    }
    ?>
    Еще важный момент - все операции с куками должны происходить ДО отправки сообщения пользователю, то есть:

    PHP:
    <?php
    require_once 'cls_Auth.php';
    $Auth = new cls_Auth();
    echo 
    'Данные отправлены.';
    $Auth->SessionSetData('ololo');
    ?> 
    Не будет работать!



    PHP:
    <?php
    require_once 'cls_Auth.php';
    $Auth = new cls_Auth();
    $Auth->SessionSetData('ololo');
    echo 
    'Данные отправлены.';
    ?> 
    Будет работать!

    Вот в принципе как-то так :) Буду рад конструктивной критике.
    P. S. Класс "вырезан" со своего фреймворка.

    Вложения:

    • cls_Auth.zip
      Размер файла:
      1,1 КБ
      Просмотров:
      15
    FrozenThrone, DIABLO, Профессор и ещё 1-му нравится это.
Черновик сохранён Черновик удалён
Similar Threads
  1. mr.Slink
    Ответов:
    14
    Просмотров:
    1.259
  2. demquit
    Ответов:
    9
    Просмотров:
    5.848
  3. default
    Ответов:
    0
    Просмотров:
    584
Загрузка...

Поделиться этой страницей