Como faço para salvar os dados da sessão para usuários anônimos?

20

No meu último projeto para o Drupal 6, salvei os dados usando um código semelhante ao seguinte:

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

No Drupal 7, isso não funciona.

Como devo salvar os dados da sessão para usuários anônimos, no Drupal 7?

vitaly.batonov
fonte

Respostas:

4

Porque drupal salva a sessão com a chave, isso significa que você deve fazer algo como

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

Você pode tentar isso.

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

Portanto, para salvar uma variável na Sessão:

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

E para recuperar o valor, basta usar:

$myVar = lists_session("xxx");

e também como MOLOT menciona às vezes a sessão não iniciada para usuários anônimos, você deve drupal_session_start()manualmente.

Yusef
fonte
2

De acordo com os documentos , é tudo o que você precisa fazer.

O que significa que existe um erro ou suas páginas estão sendo armazenadas em cache para usuários não, para que os dados da sessão não sejam lidos. Eu verificaria suas configurações de cache em primeira instância.

Jeremy French
fonte
obrigado. Talvez isso seja um bug. mas até que eu decidi usá-lo session_api
vitaly.batonov
@ vitaly.batonov, você pode explicar como usou o session_api para resolver seu problema?
lathomas64
2

O Drupal 7 às vezes não inicia sessões automaticamente para usuários anônimos. Para usar sessões para eles, talvez seja necessário forçar a sessão iniciada com drupal_session_start para poder usar $_SESSION.

Mołot
fonte
11
Existe uma maneira de dizer ao Drupal, SEMPRE iniciar uma sessão para usuários anônimos?
1

Depois de salvar os dados, siga o seguinte:

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

Precisa de outra função:

drupal_session_start();

Como a tabela Session precisa de um registro com o ID = 0, você pode inserir manualmente um registro com o ID = 0.

Tony Mao
fonte
0

crie um usuário com uid = 0 na tabela de usuários porque o drupal sempre usa esse uid para usuários anônimos

sqzaman
fonte