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?
Parce que drupal enregistrer la session 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.
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
.
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.
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 de session a besoin d'un enregistrement avec id = 0, vous pouvez insérer manuellement un enregistrement avec id = 0.
créer un utilisateur avec uid = 0 dans le tableau des utilisateurs car drupal utilise toujours cet uid pour les utilisateurs anonymes