it-swarm.com.de

Wie speichere ich Sitzungsdaten für anonyme Benutzer?

In meinem letzten Projekt für Drupal 6) habe ich die Daten mit Code ähnlich dem folgenden 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?

20
vitaly.batonov

Da drupal Sitzung mit Schlüssel speichern, bedeutet dies, dass Sie so etwas tun sollten

  $_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 der Sitzung:

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

Und um den Wert abzurufen, verwenden Sie einfach:

$myVar = lists_session("xxx");

und so wie MOLOT manchmal erwähnt, dass Sitzungen für anonyme Benutzer nicht gestartet wurden, sollten Sie drupal_session_start() manuell.

4
Yusef

Drupal 7 startet manchmal nicht automatisch Sitzungen für anonyme Benutzer. Um Sitzungen für sie zu verwenden, müssen Sie möglicherweise erzwingen, dass die Sitzung mit drupal_session_start gestartet wird, um $_SESSION Verwenden zu können.

2
Mołot

Laut den Dokumenten , das ist alles was Sie tun müssen.

Dies bedeutet, dass entweder ein Fehler vorliegt oder Ihre Seiten für andere Benutzer zwischengespeichert werden, sodass die Sitzungsdaten nicht gelesen werden. Ich würde in erster Linie Ihre Caching-Einstellungen überprüfen.

2
Jeremy French

Nachdem Sie Daten gespeichert haben, gehen Sie wie folgt vor:

$_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 einen Datensatz mit der ID = 0 manuell einfügen.

1
Tony Mao

erstellen Sie einen Benutzer mit uid = 0 in der Benutzertabelle, da drupal verwendet diese uid immer für anonyme Benutzer

0
sqzaman