Php 会话容器在zf2中不工作?
我看到了很多关于StackOverflow的问题,我有这个代码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
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的另一个包,其中容器工作正常。但现在我必须将我的所有代码复制到新包中。因此我认为问题出在哪里他自己也在包裹里。