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?
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.
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.
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
.fonte
Depois de salvar os dados, siga o seguinte:
Precisa de outra função:
Como a tabela Session precisa de um registro com o ID = 0, você pode inserir manualmente um registro com o ID = 0.
fonte
crie um usuário com uid = 0 na tabela de usuários porque o drupal sempre usa esse uid para usuários anônimos
fonte