Сеансы в ZF2

Не могли бы вы рассказать, как правильно использовать сеансы в ZF2? Пока у меня есть этот код:

"session" => [ "remember_me_seconds" => 2419200, "use_cookies" => true, "cookie_httponly" => true ] 

Это конфигурация сеанса, которую я скопировал из некоторого сообщения здесь в stackoverflow. Теперь я должен поместить этот код в module.config.php в каждом модуле, который использует сеансы или в модуле приложения?

 public function onBootstrap(EventInterface $Event) { $Config = $Event->getApplication()->getServiceManager()->get('Configuration'); $SessionConfig = new SessionConfig(); $SessionConfig->setOptions($Config['session']); $SessionManager = new SessionManager($SessionConfig); $SessionManager->start(); Container::setDefaultManager($SessionManager); } 

Такая же проблема с методом onBootstrap () класса Module. Должен ли этот код переходить в класс модуля модуля или только один раз в класс модуля приложения?

В обоих случаях я пробовал оба подхода, и я даже попытался поместить этот код в оба модуля сразу, но единственное, что я смог выполнить, это установить переменные сеанса в конструкторе контроллера, а затем прочитать их в действиях / методах. Мне не удалось установить переменную сеанса в одном действии / методе, а затем прочитать ее в другом. Если я удалю строки, в которых я задал переменные в конструкторе контроллера, я больше не могу видеть эти переменные в сеансе. Сессия ведет себя так, как будто она была создана и удалена каждый раз, когда запрашивается страница.

Я что-то упускаю? Пожалуйста, не связывайте меня с любыми ресурсами в Интернете, я прочитал их все, и они не очень полезны.

Вам не нужно делать какие-либо настройки для использования сессий в Zend Framework 2. Конечно, вы можете изменять настройки, но если вы просто хотите встать и работать с сеансами, то не беспокойтесь об этом пока.

Мои извинения, но я проигнорирую ваше последнее предложение; около месяца назад я написал статью об этой теме с целью показать, как быстро начать работу с использованием сеансов в ZF2. В поисковых системах это не очень хорошо, так что, скорее всего, вы его не читали.

Вот фрагмент кода, показывающий, как это можно сделать. Если вас интересует, как это работает за кулисами, обратитесь к ссылке выше.

 namespace MyApplication\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\Session\Container; // We need this when using sessions class UserController extends AbstractActionController { public function loginAction() { // Store username in session $userSession = new Container('user'); $userSession->username = 'Andy0708'; return $this->redirect()->toRoute('welcome'); } public function welcomeAction() { // Retrieve username from session $userSession = new Container('user'); $username = $userSession->username; // $username now contains 'Andy0708' } } 

о сессии

Где вы хотите сохранить сеанс (в mysql-db, в mongo-db или в ram, …)? Как классифицировать сеанс в «пространство имен», например

 $_SESSION["namespace"]["user"], $_SESSION["namespace_1"]["user"]? 

SessionManager

в Zend, Zend \ Session \ SessionManger поможет вам сделать многое, как указано выше

простая конфигурация для SessionManger

 $sessionManager = new SessionManager(); $sessionStorage = new SessionArrayStorage(); $sessionManager->setStorage($sessionStorage); //you can add more config, read document from Zend $sessionContainer = new Container("ABC", $sessionManager); $sessionContainer->offsetSet("user", "lehoanganh25991"); 

когда вы вызываете новый Контейнер без какой-либо конфигурации SessionManager

 $sessionContainer = new Container("abc"); 

за зрением Zend создает SessionManager по умолчанию, а затем передает его в Container

SessionArrayStorage, $ _SESSION

SessionArrayStorage в Zend может работать с $ _SESSION, мы можем получить доступ к user выше

 $_SESSION["ABC"]["user"] 

если вы установите другие хранилища, такие как mysql-db, mongo-db, в ram, .. доступ через $ _SESSION может не работать

сеанс доступа

в модуле А, установить сеанс

Как мы можем получить доступ к нему в Moudle B? где $ sessionContainer variable @@?

это довольно странно, но когда вы хотите получить доступ к этому контейнеру, создайте новый с SAME CONFIG

 $sessionManager = new SessionManager(); $sessionStorage = new SessionArrayStorage(); $sessionManager->setStorage($sessionStorage); $sessionContainer = new Container("ABC", $sessionManager); //access var_dump("get user from \$sessionContainer", $sessionContainer->offsetGet("user")); 

просмотрите демо на github: https://github.com/hoanganh25991/zend-auth-acl/tree/d0a501e73ac763d6ef503bbde325723ea1868351

(через коммиты, проект изменился, получить доступ к этому дереву)

 in FronEnd\Controller\IndexController in AuthAcl\Module.php in AuthAcl\Service\SimpleAuth i acces same session at different places 
 namespace Application\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Zend\Session\Container; class IndexController extends AbstractActionController { // set session values public function indexAction() { $session = new Container('User'); // name your session here by replacing User $user_session->offsetSet('user_name', "your user name"); // set your session user name $user_session->offsetSet('user_id', "1232"); //set your session user id } // function to get values from session public function getdataAction(){ $session = new Container('User'); $user_name= $user_session->offsetGet('user_name'); // get user name from the session $user_id= $user_session->offsetGet('user_id'); // get user id from the session } // function to unset session values public function unsetdataAction(){ $session = new Container('User'); $user_session->offsetUnset('user_name'); // unset user name $user_session->offsetUnset('user_id'); } }