In short: it's not a big difference and you can use whatever feels right in the context. I would stick with JApplication/setUserState
because I think the code is better self explanatory.
The actual difference:
Both methods will store the specified state in the session. JApplication/setUserState
will in fact internally use JSession/set
to store the state.
What JApplication/setUserState
does differently is that it will store every key value pair in a JRegistry. So it is equal to:
$session = JFactory::getSession();
$registry = $session->get('registry');
$registry->set('myvar', $myvarvalue);
So what's the point of using a JRegistry
? It's the pretty much the functionally provided JRegistryFormat
. You can use it to both parse and format the state:
$session = JFactory::getSession();
$registry = $session->get('registry');
$json = $registry->toString('JSON');
$xml = $registry->toString('XML');
It's also worth pointing out that using JApplication/setUserState
your state will end up in the "default" namespace:
$app = JFactory::getApplication();
$app->setUserState( 'myvar', $myvarvalue );
// $_SESSION['default']['registry']->set('myvar', $myvarvalue)