CodeIgniter - ¿Mis datos de sesión personalizados están siendo eliminados por Facebook?

StackOverflow https://stackoverflow.com/questions/1610231

  •  05-07-2019
  •  | 
  •  

Pregunta

Me pregunto si hay una manera de volcar todos los valores de

$this->session->userdata() 

para que pueda solucionar problemas?

Estoy trabajando dentro de Facebook y tengo una página de inicio de sesión, y una vez que tenga éxito, quiero pasar el UID del usuario actual, y pensé que esto funcionaría bien.

Actualmente tengo el uid configurado de la siguiente manera:

require_once 'facebook.php';
$appapikey = 'XXXX';
$appsecret = 'XXXX';
$facebook = new Facebook($appapikey, $appsecret);
$user_id = $facebook->require_login();
$this->db->like('uid', $user_id);
$this->db->from('users');
$has_signed_up = $this->db->count_all_results();

if ($has_signed_up == 0) {
redirect('/setup/signup/', 'location');
}
else {
$this->session->set_userdata('uid', $user_id);
redirect('/preferences/index/', 'location');
}

Entonces se produce la redirección, y tengo una configuración muy simple en preferencias / índice:

    echo "this is the preferences form <br />";
    echo $this->session->userdata('uid');
    echo $this->session->userdata('session_id');

Y el resultado es inescrutable:

this is the preferences form
858f500e167e359edc1942a96f3bac35

Por lo tanto, omite totalmente el eco medio que contiene el uid. ¿No estoy configurando esto correctamente? ¿Hay una manera de volcar todos los valores de la matriz de sesión para ver qué está pasando? Cualquier ayuda sería genial.

ACTUALIZAR

He ejecutado var_dump ($ this- > session- > userdata) en cada sitio web sin procesar ya través de Facebook.

En el sitio web, expone todos los valores establecidos en una matriz que contiene 5 valores (session_id, IP, User_agent, last_activity y uid).

Sin embargo, dentro del chrome de Facebook, solo muestra los 4 valores establecidos por CodeIgniter. He escuchado que las cookies solo pueden ser 4k y que el cifrado podría ser un problema. ¿FB podría estar llenando las cookies con sus propios datos encriptados (leer: más grandes)?

ACTUALIZACIÓN 2

Cuando comento la redirección, y solo tengo:

  else {
  $this->session->set_userdata('uid', $user_id);
  echo ':test_'.$this->session->userdata('uid').'_test:';
  //redirect('/preferences/index/', 'location');
  }

Devuelve debidamente: test_1234_test: dentro de Facebook. Así que en algún lugar durante la redirección está perdiendo esta parte de la matriz (pero no toda la matriz).

¿Es posible que solo esté creando una nueva sesión en la página de redirección? Por eso es que solo tiene las cuatro " stock " variables? Si este es el caso, tendré que investigar cómo crea las sesiones, y si Facebook borra las cookies, supongo.

ACTUALIZACIÓN 3

Así que he recurrido al uso de una base de datos para almacenar información de sesión en lugar de cookies, pensando que FB estaba eliminándolas o chocando con ellas. Actualmente tengo la aplicación configurada para

  1. Establecer $ id_usuario = 1234
  2. $ this- > session- > set_userdata ('uid', $ user_id)
  3. Redirigir a la nueva página
  4. Var_dump toda la información posible

Lo que ocurre en el DB es esto: registros de base de datos http://nikolausjj.facebook.joyent.us/Picture2.png

Así que crea un buen registro, con los datos del usuario, luego, inmediatamente después de la redirección, se crea una nueva sesión sin reconocer la anterior. ¿Alguien puede explicar dónde comprueba el marco de CI para ver si tiene una sesión anterior? El manual del usuario lo explica como " magia " básicamente.

¿Fue útil?

Solución

Puede usar var_dump () para dar salida a la sesión. Algo como esto

var_dump($this->session);

La llamada set_userdata se ve bien. ¿Estás seguro de que $ user_id está configurado. Debido a que el eco se ejecuta de manera segura, pero uid no está configurado o configurado como cadena vacía.

Intenta reemplazar el eco con

echo ':test_'.$this->session->userdata('uid').'_test:';

Otra información útil para responder

  • ¿Qué navegador estás usando?
  • ¿Tienes un guión bajo _ en tu nombre de dominio?
  • ¿Está utilizando sesiones de CI o algún contenedor para las sesiones nativas de PHP?
  • ¿El valor para uid también se pierde / no se establece cuando se comenta la redirección?

Otras sugerencias:

  • intente redirect ('/ preferences / index /', 'refresh'); en lugar de location
  • No estoy familiarizado con el desarrollo de Facebook pero ¿está / preferences / index bajo su control? Si es así, intente eliminar (si está presente) $ this- > load- > library (& # 8216; session & # 8217;) y, en su lugar, cárguelo en autoload.php .
  • intente cambiar $ config [& # 8216; sess_match_ip & # 8217;] a `FALSE
  • intente configurar $ config [& # 8216; sess_encrypt_cookie & # 8217;] en FALSE
  • intente reemplazar el uso de CI-Session con Sesión nativa de CI
  • Es UID información sensible si no se almacena en una cookie. Si importa si puede ser falsificado, no.

Otros consejos

No resolví cómo pasar las variables de sesión de una página a otra a través de Facebook. Mi solución fue simplemente llamar a la API de Facebook para el UID del usuario nuevamente en cada página. No es una gran programación, pero funciona bien para mí. : - /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top