4

As the title suggests, I'm a bit confused about those two methods of creating and accessing a session on Drupal 8. I'm not quite sure when to use the one over the other, could someone point me to the right direction?

My issue started after a Drupal update, where originally I was using this way to start a session for anonymous users on my module:

$request       = \Drupal::request();
$this->session = $request->getSession();

$session       = $this->session->get('mymodule');

After the update, the above code won't create a session for anonymous user and the only way to make it work was this piece of code:

$tempstore = \Drupal::service('user.private_tempstore')->get('mymodule_name');
$tempstore->set('my_variable_name', ['test var' => 'this is my value']);

echo '<pre>';
print_r($tempstore->get('my_variable_name'));
echo '</pre>';

So, even though I've managed to make it work, I'm not quite sure why it did work that way.

  • 1
    If you did run composer update recently it could be connected to this (now fixed) issue drupal.org/project/drupal/issues/3045349 – 4k4 Apr 5 '19 at 13:40
  • Yes, indeed.. In fact I looked at the bug report and I managed to identify the line that caused the issue. It is there, the extra condition that is being inserted: public function save() { $this->storage->save(); if ($this->isStarted()) { $this->storage->save(); } } – user82025 Apr 5 '19 at 16:01
5

The main difference is that session data is stored in the database table sessions and PrivateTempStore in key_value_expire. Session data is preloaded in memory, private tempstore data only when requested. Session data is for small amount of data not exceeding a few megabytes, private tempstore for bigger chunks of data you don't want to have in memory when not needed.

What you've posted is not starting a session, it gets a value. You would need to set a value first to start a session.

  • Yeah, my bad, it is setting the session in another controller, I just wanted to demonstrate the methods that I'm using. Also, I've found this article for a more detailed explanation: palantir.net/blog/d8ftw-storing-data-drupal-8 – user82025 Apr 4 '19 at 15:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy