it-swarm.it

Come posso salvare i dati della sessione per gli utenti anonimi?

Nel mio ultimo progetto per Drupal 6, ho salvato i dati usando un codice simile al seguente:

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

In Drupal 7, non funziona.

Come devo salvare i dati della sessione per gli utenti anonimi, in Drupal 7?

20
vitaly.batonov

Questo perché drupal salva sessione con chiave, questo significa che dovresti fare qualcosa del genere

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

Puoi provare questo.

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];
}

Quindi, per salvare una variabile in Sessione:

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

E per recuperare il valore, basta usare:

$myVar = lists_session("xxx");

e come MOLOT menziona a volte la sessione non iniziata per utenti anonimi, allora dovresti drupal_session_start() manualmente.

4
Yusef

Drupal 7 a volte non avvia automaticamente le sessioni per utenti anonimi. Per utilizzare le sessioni per loro, potrebbe essere necessario forzare l'avvio della sessione con drupal_session_start per poter utilizzare $_SESSION.

2
Mołot

Secondo i documenti , questo è tutto ciò che dovresti fare.

Ciò significa che è presente un bug o che le tue pagine vengono memorizzate nella cache per utenti anon quindi i dati della sessione non vengono letti. Vorrei verificare le impostazioni di memorizzazione nella cache in primo luogo.

2
Jeremy French

Dopo aver salvato i dati come segue:

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

Hai bisogno di un'altra funzione:

drupal_session_start();

A causa della tabella delle sessioni, è necessario un record con id = 0, è possibile inserire manualmente un record con id = 0.

1
Tony Mao

crea un utente con uid = 0 nella tabella degli utenti perché drupal usa sempre quell'uid per utenti anonimi

0
sqzaman