Comment enregistrer les données de session pour les utilisateurs anonymes?


20

Dans mon dernier projet pour Drupal 6, j'ai enregistré les données en utilisant un code similaire au suivant:

$_SESSION['xxx'] = serialize($data);

Dans Drupal 7, cela ne fonctionne pas.

Comment dois-je enregistrer les données de session pour les utilisateurs anonymes, dans Drupal 7?

Réponses:


4

Parce que la session de sauvegarde drupal avec la clé, cela signifie que vous devriez faire quelque chose comme

  $_SESSION['yourkey']['xxx'] = serialize($data);

Vous pouvez essayer ça.

function lists_session($key, $value = NULL) {
  global $user;

  static $storage;

  // If the user is anonymous, force a session start.
  if(!user->uid) {
    drupal_session_start();
  }

  if ($value) {
    $storage[$key] = $value;
    $_SESSION['lists'][$key] = $value;   // I use 'lists' in case some other module uses 'type' in $_SESSION
  }
  else if (empty($storage[$key]) && isset($_SESSION['lists'][$key])) {
    $storage[$key] = $_SESSION['lists'][$key];
  }
  return $storage[$key];
}

Donc, pour enregistrer une variable dans Session:

lists_session("xxx", serialize($data));

Et pour récupérer la valeur, utilisez simplement:

$myVar = lists_session("xxx");

et comme MOLOT mentionne parfois que la session n'est pas démarrée pour les utilisateurs anonymes, vous devez drupal_session_start()manuellement.


2

Selon les documents , c'est tout ce que vous devez faire.

Ce qui signifie qu'il y a soit un bug, soit que vos pages sont mises en cache pour les non-utilisateurs afin que les données de session ne soient pas lues. Je vérifierais vos paramètres de mise en cache dans un premier temps.


Merci. C'est peut-être un bug. mais jusqu'à ce que je décide de l'utiliser session_api
vitaly.batonov

@ vitaly.batonov pouvez-vous expliquer comment vous avez utilisé session_api pour résoudre votre problème?
lathomas64

2

Drupal 7 ne démarre parfois pas automatiquement les sessions pour les utilisateurs anonymes. Pour utiliser des sessions pour eux, vous devrez peut-être forcer la session démarrée avec drupal_session_start pour pouvoir utiliser $_SESSION.


1
Existe-t-il un moyen de dire à Drupal, TOUJOURS démarrer une session pour les utilisateurs anonymes?

1

Après avoir enregistré les données en suivant:

$_SESSION['xxx'] = serialize($data);

Besoin d'une autre fonction:

drupal_session_start();

Étant donné que la table Session a besoin d'un enregistrement avec id = 0, vous pouvez insérer manuellement un enregistrement avec id = 0.


0

créer un utilisateur avec uid = 0 dans la table des utilisateurs car drupal utilise toujours cet uid pour les utilisateurs anonymes

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.