将Zend_Auth存储后端$_SESSION更改为Memcached


Change Zend_Auth storage backend $_SESSION to Memcached

我正在尝试更改Zend_Auth的会话后端。但没能成功。在我的bootstrap.php中;

    $oBackend = new Zend_Cache_Backend_Libmemcached(
        array(
            'servers' => $servers,
            'compression' => false
    ) );
    // configure caching frontend strategy
    $oFrontend = new Zend_Cache_Core(
        array(
            'caching' => true,
            'automatic_serialization' => true
        ) );
    // build a caching object
    $cache = Zend_Cache::factory( $oFrontend, $oBackend );
    $saveHandler = new 'Application'Auth'Adapter'Memcached();
    $saveHandler->setCacher($cache);
    'Zend_Session::setSaveHandler($saveHandler);

它成功地保存了值Memcache,没有任何问题。我测试它;

    $namespace = new Zend_Session_Namespace();
    $namespace->name = "Fatih";

在其他控制器中;

    $ns = new Zend_Session_Namespace();
    var_dump($ns->name);

可以,但我在Memcache中看不到Zend_Auth值。但是如果我var_dump($_SESSION)我可以看到它像;

["Zend_Auth"]=> array(1) { ["storage"]=> object(Application_Security_Auth_Storage)#66 (1) { ["_user":protected]=> object(Application_Security_Auth_User)#84 (4) { ["id":protected]=> object(MongoId)#87 (1) { ["$id"]=> string(24) "4fcca6b8c863c79d33000004" } ["username":protected]=> string(5) "admin" ["role":protected]=> string(5) "admin" ["fullname":protected]=> NULL } } }

在这里你可以看到我的登录方法;

public function login($username, $password)
{
    if ($username == "" || $password == "")
        return false;
    $adapter = new 'Application_Security_Auth_Adapter();
    $adapter->setIdentity($username);
    $adapter->setCredential($password);
    $auth = 'Zend_Auth::getInstance();
    $result = $auth->authenticate($adapter);
    return $result->isValid();
}

我不知道这是否有任何帮助,但Zend_auth会自动创建存储对象,您可以使用从任何地方访问该对象

$session = new Zend_Session_Namespace('Zend_Auth');
$session->storage->//here goes your property like user id password etc

现在,如果您使用Zend_Auth,它将使用Zend_Auth_Storage_Session默认值"Zend_Auth"作为Zend_Session_Namespace。现在,要更改使用的名称空间,请修改Zend_Auth_Storage_Session中的默认值,否则请手动执行所有操作。如果您想缓存此信息或将其存储在其他位置,您可以随时访问它并将其移动到您想要的位置。

现在我希望我能帮上忙,但我对memcache 一无所知

我认为这是最简单的方法,它会为您实现

尊敬的使用用户This Class For Zend Framework For Session。

使用Zend''Session''Container;

然后按照以下步骤从Seesions获取值。

    $user_session = new Container('user_login');
    $loginUser = $user_session->login_user['user_type'];

$user_session->login_user在这个变量中,我存储了所有与用户相关的信息,如用户类型、用户电子邮件、用户id等。然后我在每个页面上获得这个会话值。。。