¿Cómo guardo los datos de sesión para los usuarios anónimos?

20

En mi último proyecto para Drupal 6, guardé los datos usando un código similar al siguiente:

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

En Drupal 7, no funciona.

¿Cómo debo guardar los datos de sesión para los usuarios anónimos, en Drupal 7?

vitaly.batonov
fuente

Respuestas:

4

Es porque drupal guardar sesión con clave, esto significa que debe hacer algo como

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

Puedes probar esto.

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

Entonces, para guardar una variable en la sesión:

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

Y para recuperar el valor, solo use:

$myVar = lists_session("xxx");

y además, como menciona MOLOT, a veces la sesión no se ha marcado para usuarios anónimos, entonces debería hacerlo drupal_session_start()manualmente.

Yusef
fuente
2

Según los documentos , eso es todo lo que debe hacer.

Lo que significa que hay un error o que sus páginas están siendo almacenadas en caché para los usuarios que no están leyendo los datos de la sesión. Verificaría su configuración de almacenamiento en caché en primera instancia.

Jeremy French
fuente
Gracias. Quizás esto sea un error. pero hasta que decidí usarlo session_api
vitaly.batonov
@ vitaly.batonov, ¿puede explicar cómo utilizó session_api para resolver su problema?
lathomas64
2

Drupal 7 a veces no inicia automáticamente sesiones para usuarios anónimos. Para usar sesiones para ellos, es posible que deba forzar la sesión iniciada con drupal_session_start para poder usar $_SESSION.

Mołot
fuente
1
¿Hay alguna manera de decirle a Drupal que SIEMPRE comience una sesión para usuarios anónimos?
1

Después de guardar los datos siguiendo:

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

Necesita otra función:

drupal_session_start();

Debido a que la tabla Session necesita un registro con id = 0, puede insertar manualmente un registro con id = 0.

Tony Mao
fuente
0

crea un usuario con uid = 0 en la tabla de usuarios porque drupal siempre usa ese uid para usuarios anónimos

sqzaman
fuente