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?

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.


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.


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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.