What is the difference between \Drupal::request()->getSession() and \Drupal::service('user.private_tempstore')?

drupal.stackexchange https://drupal.stackexchange.com/questions/278686

  •  07-02-2021
  •  | 
  •  

Domanda

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.

È stato utile?

Soluzione

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top