Что такое «красивый и правильный ОО» способ обработки сеансов и аутентификации? - PullRequest
0 голосов
/ 06 февраля 2011

Является ли объединение этих двух концепций плохим подходом?

На данный момент я делегирую всю обработку сеанса и желаю ли пользователь выйти из системы в моем файле config.inc.Когда я писал свой класс Auth, я начал задаваться вопросом, должен ли мой класс Auth заботиться о большей части логики в моем config.inc.Несмотря на это, я уверен, что есть более элегантный способ справиться с этим ...

Вот что я имею в своем config.inc (также большой кусок этого кода основан на ответе, который я нашел на SOкроме как я не могу найти источник ._.):

ini_set('session.name', 'SID');

# session management
session_set_cookie_params(24*60*60); // set SID cookie lifetime
session_start();
if(isset($_SESSION['LOGOUT']) {
    session_destroy(); // destroy session data
    $_SESSION = array(); // destroy session data sanity check
    setcookie('SID', '', time() - 24*60*60); // destroy session cookie data
    #header('Location: '.DOCROOT);
} elseif(isset($_SESSION['SID_AUTH'])) { // verify user has authenticated

    if (!isset($_SESSION['SID_CREATED'])) {
        $_SESSION['SID_CREATED'] = time();
    } elseif (time() - $_SESSION['SID_CREATED'] > 6*60*60) {
        // session started more than 6 hours ago
        session_regenerate_id(); // reset SID value
        $_SESSION['SID_CREATED'] = time();  // update creation time
    }

    if (isset($_SESSION['SID_MODIFIED']) && (time() - $_SESSION['SID_MODIFIED'] > 12*60*60)) {
        // last request was more than 12 hours ago
        session_destroy(); // destroy session data
        $_SESSION = array(); // destroy session data sanity check
        setcookie('SID', '', time() - 24*60*60); // destroy session cookie data
    }

    $_SESSION['SID_MODIFIED'] = time(); // update last activity time stamp
}

1 Ответ

2 голосов
/ 06 февраля 2011

Если вы не возражаете против фреймворков и ищите более элегантный способ, загляните в Zend_Auth - он обрабатывает аутентификацию и все сессионные вещи, которые должны быть сделаны изнутриЭто позволяет вам подключать либо хранилище сеансов, либо любой другой механизм для сохранения подлинности данных.

Так что я бы сказал, что аутентификация и хранилище не должны быть тесно связаны, а первый должен определить интерфейс с последним и принять сеанс в качестве опции.

...