Лучший способ справиться с обработкой сессии в Zend Framework - PullRequest
2 голосов
/ 24 марта 2010

Итак, я запускаюсь в среде Zend и ищу реализацию сеанса «Пользователь» для всего сайта… к чему-то, к чему я могу легко получить доступ из ВСЕХ модулей / контроллеров в приложении.

Похоже, я должен создать новое пространство имен в библиотеке и расширить контроллер, например:

class MYCUSTOMLIB_Controller_Action extends Zend_Controller_Action
{
    protected $_userSession;

    function preDispatch(Zend_Controller_Request_Abstract $req)
    {
         $this->_userSession = new Zend_Session_Namespace('user');
    }
}

И тогда все мои контроллеры / модули / и т. Д. Расширяются от этого?

Или я должен создать плагин или что? Как бы вы сделали этот плагин для передачи пользовательской сессии на контроллер?

Или я делаю это в начальной загрузке ?? Опять как перейти на контроллер?

Также мне следует использовать Zend_Session_Namespace или Zend_Http_Cookie, а также как зашифровать и очистить файлы cookie в формате xss или это сделано автоматически?

Ответы [ 2 ]

6 голосов
/ 24 марта 2010

Я бы тоже инициализировал в начальной загрузке:

//Bootstrap.php
protected function _initUserSession()
{
    return new Zend_Session_Namespace('user');
}

Тогда я бы использовал помощник действий:

// library/App/Controller/Action/Helper/Session.php
class App_Controller_Action_Helper_Session extends Zend_Controller_Action_Helper_Abstract
{
    function direct()
    {
        return $this->getFrontController()->getParam('userSession');
    }
}

Вы получаете доступ к нему в вашем контроллере следующим образом:

function indexAction()
{
    $session = $this->_helper->session;
}
0 голосов
/ 24 марта 2010

Вы должны инициализировать ваш сеанс в начальной загрузке. Вы можете либо поместить его в Zend_Registry и получить к нему доступ таким образом, либо через свои контроллеры вы можете получить доступ к своему загрузчику, вызвав $ this-> getInvokeArg ('bootstrap').

// in your controllers    
public function init()
{
    $bootstrap = $this->getInvokeArg('bootstrap');
    $this->_session = $bootstrap->getResource('session');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...