9

细节

我可以使用用户状态变量在 Joomla 会话中存储和检索数据。

示例设置变量

$app =& JFactory::getApplication();
$app->setUserState( 'myvar', $myvarvalue );

但我也可以使用 JFactory/getSession 在会话中存储和检索变量。

示例设置变量

$session =& JFactory::getSession();
$session->set('myvar', $myvarvalue);

问题

这两种方法有什么区别?我什么时候应该使用其中一种?

4

1 回答 1

9

简而言之:这没什么大不了的,您可以在上下文中使用任何感觉合适的东西。我会坚持下去, JApplication/setUserState因为我认为代码更好地自我解释。

实际区别:

这两种方法都将在会话中存储指定的状态。JApplication/setUserState实际上将在内部用于JSession/set存储状态。

JApplication/setUserState不同之处在于它将每个键值对存储在JRegistry。所以它等于:

$session = JFactory::getSession();
$registry = $session->get('registry');
$registry->set('myvar', $myvarvalue);

那么使用 a 有什么意义JRegistry呢?这几乎是提供的功能JRegistryFormat。您可以使用它来解析和格式化状态:

$session = JFactory::getSession();
$registry = $session->get('registry');
$json = $registry->toString('JSON');
$xml = $registry->toString('XML');

还值得指出的是,使用JApplication/setUserState你的状态最终会在“默认”命名空间中:

$app = JFactory::getApplication();
$app->setUserState( 'myvar', $myvarvalue );
// $_SESSION['default']['registry']->set('myvar', $myvarvalue)
于 2012-11-02T14:31:26.607 回答