Подтвердить что ты не робот

Изменение базы данных хранения Zend_Auth $_SESSION на 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);

Это нормально, но я не мог видеть значения Zend_Auth в memcache. Но если я 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();
}
4b9b3361

Ответ 1

Я не знаю, поможет ли это, но 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

Ответ 2

Я думаю, что это самый простой способ, и это сработает для вас.

Уважаемый пользователь использования Этот класс для Zend Framework для сеанса.

использовать Zend\Session\Container;

Затем выполните процедуру "Ниже" для получения значений из сечений.

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

$user_session- > login_user в этой переменной я храню весь массив связанной с пользователем информации, такой как тип пользователя, адрес электронной почты пользователя, идентификатор пользователя и т.д.... затем я получаю эти значения сеанса на каждой странице...