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 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(); } } – Spiros Apr 5 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 – Spiros Apr 4 at 15:24

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.