PhalconPHP не может получить значения сеанса в другом контроллере

Я использую PhalconPHP и сохраняю значения в сеансе после входа в систему, как показано ниже.

$this->session->start();
$this->session->set('auth', array(
'dealer_id' => $dealers->getDealerId(),
'username'  => $dealers->getUserName(),
'language_id' => $dealers->getLanguageId(),
'dealername'  => $dealername,
));

session_write_close();

которые устанавливают значения в сеансе, даже сразу после этого, если я пытаюсь распечатать

print_r($this->session->get('auth'))

это возвращается

Array
(
[dealer_id] => 78
[username] => swiftmailcomm
[language_id] => 1
[dealername] => Swiftmail Communication
)

Но когда я пытаюсь получить значения этого сеанса, используя $this->session->get('auth') в ControllerBase в каком-то действии это ничего не возвращает. Кажется, он разрушен.

module.php

public function registerServices(\Phalcon\DiInterface $di)
{
$di->set('dispatcher',function(){

$eventsManager = new EventsManager;

/**
* Check if the user is allowed to access certain action using the SecurityPlugin
*/
$eventsManager->attach('dispatch:beforeDispatch', new SecurityPlugin);


/**
* Handle exceptions and not-found exceptions using NotFoundPlugin
*/
$eventsManager->attach('dispatch:beforeException', new NotFoundPlugin);

$dispatcher = new MvcDispatcher;
$dispatcher->setEventsManager($eventsManager);
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$dispatcher->setDefaultNamespace("NBBD_SkyWebTech\Dealer\Controllers\\");
return $dispatcher;
});
/**
* Read configuration
*/
$config = include __DIR__ . "/config/config.php";

//Register Volt as a service
$di['view'] = function () use ($config) {

$view = new View();
$view->setViewsDir($config->application->viewsDir);
//activating volt engine
$view->registerEngines(array(
".volt" => 'voltService'
));
return $view;
};
$di->set('voltService', function($view, $di) use ($config) {

$volt = new Volt($view, $di);
$volt->setOptions(array(
"compiledPath" => $config->application->voltCacheDir,
'compiledSeparator' => '_',
"compiledExtension" => ".compiled"));
return $volt;
});

/*
* Setting up the view component

$di['view'] = function () use ($config) {
$view = new View();
$view->setViewsDir($config->application->viewsDir);
//activating volt engine
$view->registerEngines(array(
".phtml" => 'voltService'
));
return $view;
}; */
//Set the views cache service
$di->set('viewCache', function() use ($config) {

// Cache the files for 1hour using a Output frontend
$frontCache = new Output(array(
"lifetime" => 3600
));
//Cache data for one day by default
$cache = new File($frontCache, array(
"cacheDir" => $config->application->cacheDir
));

return $cache;
});

//Model Cache
$di->set('modelsCache', function() use ($config) {

//Cache data for one day by default
$frontCache = new \Phalcon\Cache\Frontend\Data(array(
"lifetime" => 3600
));

//Cache data for one day by default
$cache = new File($frontCache, array(
"cacheDir" => $config->application->cacheDir
));

return $cache;
});

//Set up the flash service
$di->set('flash', function() {
return new \Phalcon\Flash\Session(array(
'error'   => 'alert alert-danger',
'success' => 'alert alert-success',
'notice'  => 'alert alert-info',
));
});

/**
* Start the session the first time some component request the session service
*/
$di->set('session', function () {
$session = new SessionAdapter();
$session->start();

return $session;
});

}

0

Решение

В своем объявлении сервиса сессии вы используете метод инжектора зависимости «set». Я считаю, что вам нужно использовать «setShared», так как это делает сервис сеанса единичным, что сделает все, что вы в нем установите, доступным для других контроллеров.

У меня есть точная настройка, и она работает для меня.

Я думаю, что использование метода set заставляет его каждый раз создавать новый сеанс, а не извлекать существующий, содержащий ваши данные.

    $di->setShared('session', function () {
$session = new SessionAdapter();

$session->start();

return $session;
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]