web-dev-qa-db-fra.com

Quelle est la différence entre \ Drupal :: request () -> getSession () et \ Drupal :: service ('user.private_tempstore')?

Comme le titre l'indique, je suis un peu confus au sujet de ces deux méthodes de création et d'accès à une session sur Drupal 8. Je ne sais pas trop quand utiliser l'une sur l'autre, pourrait quelqu'un me pointe dans la bonne direction?

Mon problème a commencé après une mise à jour Drupal, où à l'origine j'utilisais cette façon pour démarrer une session pour les utilisateurs anonymes sur mon module:

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

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

Après la mise à jour, le code ci-dessus ne créera pas de session pour un utilisateur anonyme et le seul moyen de le faire fonctionner était ce morceau de 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>';

Donc, même si j'ai réussi à le faire fonctionner, je ne sais pas trop pourquoi cela a fonctionné de cette façon.

4
user82025

La principale différence est que les données de session sont stockées dans la table de base de données sessions et PrivateTempStore dans key_value_expire. Les données de session sont préchargées en mémoire, les données de magasin temporaire uniquement sur demande. Les données de session sont pour une petite quantité de données ne dépassant pas quelques mégaoctets, un magasin temporaire pour des blocs de données plus importants que vous ne voulez pas avoir en mémoire lorsqu'ils ne sont pas nécessaires.

Ce que vous avez publié ne démarre pas une session, il obtient une valeur. Vous devez d'abord définir une valeur pour démarrer une session.

5
4k4