什么是处理会话和身份验证的“漂亮且适当的OO”方式?

时间:2011-02-06 03:45:13

标签: php oop session authentication

将这两个概念联系起来是一种糟糕的方法吗?

截至目前,我正在委派所有会话处理以及用户是否希望在我的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 个答案:

答案 0 :(得分:2)

如果你不介意框架并寻找更优雅的方式,请查看Zend_Auth - 它处理身份验证以及需要在引擎盖下完成的所有会话内容。它允许您插入会话存储或任何其他机制以实现身份验证数据持久性。

所以我认为身份验证和存储不应该紧密耦合,但前者必须定义后者的接口并将会话作为选项。