elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  variables de sesión no funcionan despues de destruir la sesión
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: variables de sesión no funcionan despues de destruir la sesión  (Leído 5,257 veces)
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
variables de sesión no funcionan despues de destruir la sesión
« en: 10 Junio 2015, 01:26 am »

Hola buenas, necesito crear variables de sesión despues de que la sesión haya sea destruida (por inactividad), para imprimir un mensaje y para saber a que url redireccionar.

La página platform requiere que estes logueado para mostrarse, si no es el caso redirecciona automaticamente a login y al loguear detecta que session url esta declarada entonces en lugar de redireccionar a la web por defecto (la principal) redirecciona a la página platform.

Mi funcion session_start destruye la sesion cuando pasan 5 minutos sin actividad:

Código
  1. $hasExpired = NULL;
  2.  
  3. if (isset($_SESSION['client_id'], $_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY']) > 300) {
  4. // last request was more than 5 minutes ago
  5. $_SESSION = array();                    // unset $_SESSION variable for the run-time
  6. $params = session_get_cookie_params();  // Get session parameters
  7. setcookie(session_name(),               // Delete the actual cookie
  8.  '',
  9.  time() - 3600,
  10.  $params["path"],
  11.  $params["domain"],
  12.  $params["secure"],
  13.  $params["httponly"]);
  14. session_destroy();                      // destroy session data in storage
  15.  
  16. $hasExpired = true;                     // now we know the user has lost his session for inactivity
  17. }

Para avisar al usuario de que su sesión ha expirado y por esa razón se le ha redireccionado a la pagina login:

Código
  1. $hasExpired = $web_user::sec_session_start();
  2.  
  3. if ($hasExpired == true) {
  4. $_SESSION['msg'] = 'msg_afk';  // no funciona
  5. $_SESSION['url'] = 'platform';  // no funciona
  6. die(header('Location: ' . $path_login));
  7. }

En la página login se deberia mostrar el mensaje, pero no aparece ninguno porque la variable esta vacia... y tampoco redirecciona a la misma pagina de la que se le cerró la sesión.

Más abajo, en index.php, tengo otro header y ahí si que funciona la variable de sesión:

Código
  1. // if logged in == true
  2. else {
  3.    $_SESSION['url'] = 'platform'; // working
  4.    die(header('Location: ' . $path_login));
  5. } // if I log in again I'm redirected to platform

¿Alguna idea de por qué no funcionan las variables de sesión despues de destruirse la sesión?

Ya he probado a empezarla de nuevo antes de declarar las variables, pero nada...

Gracias!


« Última modificación: 10 Junio 2015, 01:31 am por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #1 en: 10 Junio 2015, 03:10 am »

No estoy muy seguro. Yo creo que después que destruyes la sesión, no puedes volver a guardar los datos en la sesión porque no hay ninguna activa, a menos que inicies una nueva sesión con session_start. Incluso el manual de PHP lo dice:

Citar
To use the session variables again, session_start() has to be called.


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #2 en: 10 Junio 2015, 03:37 am »

Pues que cosa más extraña porque ya lo intenté, y de dos maneras:

Código
  1. if ($hasExpired == true) {
  2.        $web_user::sec_session_start();
  3. $_SESSION['msg'] = 'msg_afk';  // no funciona
  4. $_SESSION['url'] = 'platform';  // no funciona
  5. die(header('Location: ' . $path_login));
  6. }

Y así:

Código
  1. if ($hasExpired == true) {
  2.        session_start();
  3. $_SESSION['msg'] = 'msg_afk';  // no funciona
  4. $_SESSION['url'] = 'platform';  // no funciona
  5. die(header('Location: ' . $path_login));
  6. }

Pero voy a probar otra vez, a veces pasan cosas raras...  :rolleyes:
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #3 en: 10 Junio 2015, 04:48 am »

Yo creo que la sesión se esta perdiendo en algún lado, yo revisaría que la cookie exista.
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #4 en: 10 Junio 2015, 15:12 pm »

Alomejor sabiendo como funciona todo te haces una idea:

Tengo un framework al que se conectan varias páginas (principal y subdominios). Todas las páginas (en index.php) empiezan la sesión de la misma manera:

Código
  1. $hasExpired = $web_user::sec_session_start();

Para que funcione la sesión en todos los subdominios, simplemente añado un punto delante del dominio, como dice en la documentación php.net:

Código
  1. $domain = '.domain.com';

Es extraño que no funcione, ya que he probado otra vez empezando la sesión, de las dos maneras esas...

¿Tal vez en los logs de php se puede ver que está pasando? Tendré que pedir acceso SSH...

Si esto no funciona, voy a tener que contemplar otra manera de saber si el usuario ha perdido la sesión por inactividad... aunque primero habrá que ver otra manera de pasar las variables a la página login (que no sea por get).
« Última modificación: 10 Junio 2015, 16:03 pm por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #5 en: 10 Junio 2015, 16:16 pm »

Es parte de un antiguo standard, los nuevos navegadores simplemente descartan el punto. Prueba a expirar la session normal y tu location ponlo así:

Código
  1. die(header('Location: ' . $path_login . '?' . htmlspecialchars(SID)));
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #6 en: 10 Junio 2015, 18:28 pm »

Nada, tampoco funcionan asi. Puse un print $_SESSION['msg'] . $_SESSION['url']; en la pagina login pero da undefined index...

De todas maneras, y pensadolo mejor, creo que será mejor poner una página entera para mostrar el mensaje de afk y explicar el motivo de la desconexión que redirigir y mostrar un simple jquery notify.

Pero seria interesante descubir el por que... hehehe

Voy a probar con la versión más reciente de PHP, ahora mismo estoy usando la 5.4.41
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #7 en: 10 Junio 2015, 19:08 pm »

Nada, tampoco funcionan asi. Puse un print $_SESSION['msg'] . $_SESSION['url']; en la pagina login pero da undefined index...

De todas maneras, y pensadolo mejor, creo que será mejor poner una página entera para mostrar el mensaje de afk y explicar el motivo de la desconexión que redirigir y mostrar un simple jquery notify.

Pero seria interesante descubir el por que... hehehe

Voy a probar con la versión más reciente de PHP, ahora mismo estoy usando la 5.4.41

¿La pagina a la que te redirecciona te esta dando una id (la URL)?
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #8 en: 10 Junio 2015, 19:30 pm »

No, solo sale ?, pero nada más. La sesión empezada otra vez, como en los dos ejemplos de arriba.

Así:

Código
  1.    if ($hasExpired == true) {
  2.            /*$web_user::sec_*/session_start();  // de las dos maneras
  3.     $_SESSION['msg'] = 'msg_afk';  // no funciona
  4.     $_SESSION['url'] = 'platform';  // no funciona
  5.        die(header('Location: ' . $path_login . '?' . htmlspecialchars(SID)));
  6.    }
« Última modificación: 10 Junio 2015, 19:32 pm por gAb1 » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: variables de sesión no funcionan despues de destruir la sesión
« Respuesta #9 en: 10 Junio 2015, 19:44 pm »

Pues eso es un indicador que no hay una sesión activa y probablemente tu session_start no llega a iniciar la sesión. ¿No hay ningún error arrojado? ¿Tienes display_errors activado y error_reporting en E_ALL?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Variables de sesion « 1 2 »
PHP
Belem 11 5,746 Último mensaje 9 Junio 2008, 21:02 pm
por alone-in-the-chat
Duda variables de sesion y Ajax
Desarrollo Web
painkillerpucela 1 2,649 Último mensaje 30 Julio 2012, 09:13 am
por sexto
[Ayuda] Destruir sesion al cambiar de pagina por href
PHP
Graphixx 3 2,755 Último mensaje 12 Enero 2013, 07:08 am
por ~ Yoya ~
Ver variables sesión en el navegador
Desarrollo Web
ars1993 3 12,317 Último mensaje 3 Febrero 2014, 13:47 pm
por ars1993
como destruir las variables de sesion
.NET (C#, VB.NET, ASP)
d91 1 1,795 Último mensaje 9 Octubre 2015, 13:43 pm
por d91
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines