In meinem letzten Projekt für Drupal 6 habe ich die Daten mit folgendem Code gespeichert:
$_SESSION['xxx'] = serialize($data);
In Drupal 7 funktioniert es nicht.
Wie soll ich die Sitzungsdaten für die anonymen Benutzer in Drupal 7 speichern?
Es ist weil Drupal Sitzung mit Schlüssel speichert, das heißt, Sie sollten so etwas tun
$_SESSION['yourkey']['xxx'] = serialize($data);
Sie können dies versuchen.
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];
}
So speichern Sie eine Variable in Session:
lists_session("xxx", serialize($data));
Und um den Wert abzurufen, verwenden Sie einfach:
$myVar = lists_session("xxx");
Und auch wenn MOLOT erwähnt, dass die Sitzung für anonyme Benutzer manchmal nicht gestartet wurde, sollten Sie dies drupal_session_start()
manuell tun .
Laut Dokumentation ist das alles, was Sie tun müssen.
Dies bedeutet, dass entweder ein Fehler vorliegt oder Ihre Seiten für einen Benutzer zwischengespeichert werden, sodass die Sitzungsdaten nicht gelesen werden. Ich würde Ihre Caching-Einstellungen in erster Linie überprüfen.
Drupal 7 startet Sitzungen für anonyme Benutzer manchmal nicht automatisch. Um Sitzungen für sie zu verwenden, müssen Sie möglicherweise die mit drupal_session_start gestartete Sitzung erzwingen , um sie verwenden zu können
$_SESSION
.quelle
Nachdem Sie Daten folgendermaßen gespeichert haben:
Benötigen Sie eine andere Funktion:
Da die Sitzungstabelle einen Datensatz mit der ID 0 benötigt, können Sie manuell einen Datensatz mit der ID 0 einfügen.
quelle
Erstellen Sie einen Benutzer mit der UID = 0 in der Benutzertabelle, da Drupal diese UID immer für anonyme Benutzer verwendet
quelle