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


20

Nel mio ultimo progetto per Drupal 6, ho salvato i dati utilizzando 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?

Risposte:


4

Questo perché drupal salva la sessione con la 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 anche come menziona MOLOT a volte sessione non iniziata per utenti anonimi, allora dovresti drupal_session_start()manualmente.


2

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.


Grazie. Forse questo è un bug. ma fino a quando non ho deciso di usarlo session_api
vitaly.batonov il

@ vitaly.batonov puoi approfondire come hai usato session_api per risolvere il tuo problema?
lathomas64,

2

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 poterlo utilizzare $_SESSION.


1
C'è un modo per dire a Drupal di avviare SEMPRE una sessione per utenti anonimi?

1

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.


0

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.