Try*_*der 9 php joomla session-variables session-state joomla2.5
细节
我可以使用用户状态变量来存储和检索Joomla会话中的数据.
示例设置变量
$app =& JFactory::getApplication();
$app->setUserState( 'myvar', $myvarvalue );
Run Code Online (Sandbox Code Playgroud)
但我也可以使用JFactory/getSession在会话中存储和检索变量.
示例设置变量
$session =& JFactory::getSession();
$session->set('myvar', $myvarvalue);
Run Code Online (Sandbox Code Playgroud)
问题
这两种方法有什么区别?我什么时候应该使用另一个?
简而言之:它不是一个很大的区别,你可以在上下文中使用任何感觉.我会坚持, JApplication/setUserState因为我认为代码更好自我解释.
实际差异:
两种方法都将在会话中存储指定的状态.JApplication/setUserState实际上将在内部用于JSession/set存储州.
什么JApplication/setUserState做不同的是,它会存储在每个键值对JRegistry.所以它等于:
$session = JFactory::getSession();
$registry = $session->get('registry');
$registry->set('myvar', $myvarvalue);
Run Code Online (Sandbox Code Playgroud)
那么使用a有JRegistry什么意义呢?这几乎是功能上提供的JRegistryFormat.您可以使用它来解析和格式化状态:
$session = JFactory::getSession();
$registry = $session->get('registry');
$json = $registry->toString('JSON');
$xml = $registry->toString('XML');
Run Code Online (Sandbox Code Playgroud)
值得指出的是,使用JApplication/setUserState您的状态将最终出现在"默认"命名空间中:
$app = JFactory::getApplication();
$app->setUserState( 'myvar', $myvarvalue );
// $_SESSION['default']['registry']->set('myvar', $myvarvalue)
Run Code Online (Sandbox Code Playgroud)