Wie speichere ich Sitzungsdaten für die anonymen Benutzer?

20

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?

vitaly.batonov
quelle

Antworten:

4

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 .

Yusef
quelle
2

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.

Jeremy French
quelle
Vielen Dank. Vielleicht ist das ein Fehler. aber bis ich mich entschied, es zu benutzen session_api
vitaly.batonov
@ vitaly.batonov Können Sie erläutern, wie Sie session_api zur Behebung Ihres Problems verwendet haben?
Lathomas64
2

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.

Mołot
quelle
1
Gibt es eine Möglichkeit, Drupal mitzuteilen, IMMER eine Sitzung für anonyme Benutzer zu starten?
1

Nachdem Sie Daten folgendermaßen gespeichert haben:

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

Benötigen Sie eine andere Funktion:

drupal_session_start();

Da die Sitzungstabelle einen Datensatz mit der ID 0 benötigt, können Sie manuell einen Datensatz mit der ID 0 einfügen.

Tony Mao
quelle
0

Erstellen Sie einen Benutzer mit der UID = 0 in der Benutzertabelle, da Drupal diese UID immer für anonyme Benutzer verwendet

sqzaman
quelle