[英]Session container not working in zf2?
我在StackOverflow上看到很多問題,我有這個代碼
use Zend\Session\Container;
class IndexController extends AbstractActionController {
public function indexAction() {
$userSession = new Container('user');
$userSession->username = 'Sandhya';
return new ViewModel();
}
}
當我在控制器中打印$userSession
容器時,它給我這個輸出
Zend\Session\Container Object (
[name:protected] => user
[manager:protected] => Zend\Session\SessionManager Object (
[defaultDestroyOptions:protected] => Array (
[send_expire_cookie] => 1
[clear_storage] =>
)
[name:protected] =>
[validatorChain:protected] =>
[config:protected] => Zend\Session\Config\SessionConfig Object (
[phpErrorCode:protected] =>
[phpErrorMessage:protected] =>
[rememberMeSeconds:protected] => 240
[serializeHandler:protected] =>
[validCacheLimiters:protected] => Array (
[0] => nocache
[1] => public
[2] => private
[3] => private_no_expire
)
[validHashBitsPerCharacters:protected] => Array (
[0] => 4
[1] => 5
[2] => 6
)
[validHashFunctions:protected] =>
[name:protected] =>
[savePath:protected] =>
[cookieLifetime:protected] => 2592000
[cookiePath:protected] =>
[cookieDomain:protected] =>
[cookieSecure:protected] =>
[cookieHttpOnly:protected] => 1
[useCookies:protected] => 1
[options:protected] => Array (
[gc_maxlifetime] => 2592000
)
)
[defaultConfigClass:protected] => Zend\Session\Config\SessionConfig
[storage:protected] => Zend\Session\Storage\SessionArrayStorage Object (
)
[defaultStorageClass:protected] => Zend\Session\Storage\SessionArrayStorage
[saveHandler:protected] =>
)
[storage:protected] => Array ( )
[flag:protected] => 2
[iteratorClass:protected] => ArrayIterator
[protectedProperties:protected] => Array (
[0] => name
[1] => manager
[2] => storage
[3] => flag
[4] => iteratorClass
[5] => protectedProperties
)
)
這意味着沒有像username
...
但是當我打印S_SESSION
它給了我這個輸出......
Array (
[__ZF] => Array (
[_REQUEST_ACCESS_TIME] => 1429081041.81
)
[user] => Zend\Stdlib\ArrayObject Object (
[storage:protected] => Array (
[username] => Sandhya
)
[flag:protected] => 2
[iteratorClass:protected] => ArrayIterator
[protectedProperties:protected] => Array (
[0] => storage
[1] => flag
[2] => iteratorClass
[3] => protectedProperties
)
)
)
有一個字段username
...
但是當我試圖在視圖中獲得$_SESSION
,它給出了與上面相同的輸出。
問題是我無法在容器和$_SESSION
獲取username
。 我需要它在控制器中。 可能有什么問題需要幫助? 謝謝。
我認為你必須處理你的配置。 您必須設置一個通用的SessionManager
來管理會話信息的處理。
像這樣的東西:
$sessionConfig = new SessionConfig();
$sessionConfig->setOptions($config);
$sessionManager = new SessionManager($sessionConfig);
$sessionManager->start();
Container::setDefaultManager($sessionManager);
我建議在ServiceManager實例中注冊SessionManager配置,然后在整個應用程序中使用它。
'service_manager' => array(
'factories' => array(
'session_manager' => 'My\Factory\SessionManagerFactory'
)
)
然后,您可以在任何控制器中獲取SessionManager:
$sessionManager = $this->serviceLocator->get('session_manager');
如果您創建一個新的Container
它將自動使用您的公共/默認SessionManager
實例,因此所有將在一個地方進行管理。
$userSession = new Container('user');
$userSession->getManager() === $this->serviceLocator->get('session_manager') // true
關於如何注冊session_manager,我將參考官方的ZF2文檔 。
您可以使用以下代碼:
$userSession = new Container('user');
//To check the session variable in zf2:
if($userSession->offsetExists('username')){
//Your logic after check condition
}
這將根據會話是否存在返回true或false。
//To get the value of session:
echo $user->offsetGet('username');
上面的代碼將返回會話索引username
的值。
而不是$userSession->username = 'Sandhya';
你可以使用下面的代碼:
$user->offsetSet('username','Sandhya');
這是zf2標准,由zf2中的會話容器使用。
你可以從控制器中的會話中獲取用戶名。
$userSession = new Container('user');
$username = $userSession->username ;
var_dump($username); //Sandhya
它對我有用。 試試吧 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.