Php 会话容器在zf2中不工作?

Php 会话容器在zf2中不工作?,php,session,zend-framework2,Php,Session,Zend Framework2,我看到了很多关于StackOverflow的问题,我有这个代码 use Zend\Session\Container; class IndexController extends AbstractActionController { public function indexAction() { $userSession = new Container('user'); $userSession->username = 'Sandhya'; return

我看到了很多关于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 
    ) 
)
这意味着没有什么比得上
用户名

但是当我打印
S\u会话时
会给我这个输出

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 
        ) 
    ) 
)
有一个字段
用户名

但是,当我试图查看
$\u会话时,它会提供与上面相同的输出

问题是我无法在容器中以及在
$\u会话中获取
用户名
。 我需要它在控制器里。
有什么问题需要帮助?谢谢。

您可以使用以下代码:

$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');
上述代码将返回会话索引
用户名
的值

而不是
$userSession->username='Sandhya'您可以使用以下代码:

$user->offsetSet('username','Sandhya');

这是zf2标准,由zf2中的会话容器使用。

我认为您必须进行配置。 您必须设置一个通用的
会话管理器来管理会话信息的处理

大概是这样的:

$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');
如果您创建了一个新的
容器
,它将自动使用您的公共/默认
会话管理器
实例,以便在一个地方管理所有内容

$userSession = new Container('user');
$userSession->getManager() === $this->serviceLocator->get('session_manager') // true

关于如何注册您的会话管理器,我将参考

您只需从控制器中的会话获取用户名即可

 $userSession = new Container('user');
 $username = $userSession->username ;
 var_dump($username); //Sandhya

这对我有用。试试看

您想在视图部分显示此用户名吗?不,我想在控制器中显示此用户名。好的,我正在发布对您有帮助的答案。会话容器只是会话的包装。您在卸载容器时看不到您的用户名,因为它存储在会话中。如果您无法通过访问用户名。在视图中的容器中,请编辑您的问题,以包括您用于测试该问题的代码。我将在控制器本身中获取会话的值,并将这些值传递给视图…echo$userSession->offsetExists('username');在其他控制器中不提供任何内容。@Sandyagor首次使用
$userSession=new Container('user')然后回显它。安装有任何问题吗?因为一切正常,但只有会话。请在这样的if条件下尝试:
if(!($user->offsetExists('username')){echo“会话退出”;}
还要检查您的会话是否已创建。我已经设置了此配置,但没有创建ServiceManager实例。这是一个很好的方法,但问题仍然存在。我已经安装了Zend的另一个包,其中容器工作正常。但现在我必须将我的所有代码复制到新包中。因此我认为问题出在哪里他自己也在包裹里。