Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 2 Noviembre 2019, 18:57 pm



Título: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: Leguim en 2 Noviembre 2019, 18:57 pm
Buenos días,
de forma global todas mis sessiones las modifique para que duren hasta que el usuario cierre el navegador, luego de eso se borran.

Código
  1. ini_set('session.cookie_lifetime', '0');
  2. ini_set('session.gc_maxlifetime', '0');
  3.  

Pero como puedo hacer que determinada $_SESSION dure 2 horas sólo esa session...


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: engel lex en 2 Noviembre 2019, 20:38 pm
a la sesion agregale un tiempo y si se accede y el tiempo está vencido, la destruyes... es la forma segura... tambien puedes darle vencimiento a la cookie, pero ya sabes como son las cookies


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: Leguim en 2 Noviembre 2019, 20:53 pm
a la sesion agregale un tiempo y si se accede y el tiempo está vencido, la destruyes... es la forma segura... tambien puedes darle vencimiento a la cookie, pero ya sabes como son las cookies

¡Hola, gracias por responder!

¿Como podría agregarle ese tiempo de vida a la $_SESSION? ¿Me podrías dar un simple ejemplo, por favor?

Gracias!


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: engel lex en 3 Noviembre 2019, 01:13 am
simplemente un almacenas un time() y confirmas si time() menos el tiempo guardado es mayor a 7200 (ya que es en segundos)


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: Leguim en 3 Noviembre 2019, 01:53 am
Creo haber entendido, según lo que entendí es que la $_SESSION guardará un time y luego preguntará si dicho time expiro pero... la $_SESSION tendrá X dato, un ID quizá (por ejemplo)...
ese será su contenido no el time()


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: WHK en 3 Noviembre 2019, 01:57 am
El time va dentro del a session, puedes agregarle todas las variables que quieras, la sesion es simplemente un array llegar y llenar.

https://www.php.net/manual/es/book.session.php#90351


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: Leguim en 3 Noviembre 2019, 04:00 am
Es decir, esto se puede hacer?

Código
  1. $_SESSION['test'] = 'Este es un mensaje';
  2. $_SESSION['test'] = time();
  3.  

Por supuesto no de esa manera, obviamente estoy sobre escribiendo en la variable datos diferentes, a lo que me refiero es, ¿esto es lo que me estan diciendo que haga? ¿poner time(); dentro de la $_session? ¿Como podría entonces hacer de dicha session un array?
¿No existe una forma de ponerle un tiempo de vida como se hace en las cookies?

Gracias.


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: engel lex en 3 Noviembre 2019, 04:12 am
es eso... y en cada solicitud

Código
  1. if(time() - $_SESSION['test'] > 7200){
  2.  #destruir sesión
  3. }
  4.  
  5.  


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: WHK en 3 Noviembre 2019, 05:32 am
Citar
¿Como podría entonces hacer de dicha session un array?

Aver, creo que debes estudiar un poco más de php.

$_SESSION ya es un array y puedes escribir todas las llaves y valores que quieras de manera implícita:

Código
  1. $_SESSION['abc'] = 'def';

O de manera explícita:

Código
  1. $_SESSION = array('abc' => 'def');

Entonces, dentro de tu array de sesion multidimensional puedes poner todo lo que desees incluyendo un valor de tiempo que puedes ponerlo donde tu quieras y luego haces la comparación y haces un session_destroy(). Por ejemplo:

Código
  1.  
  2. if(!isset($_SESSION['data']))
  3. {
  4.    // Inicia la sesión
  5.    $_SESSION = array(
  6.        'data' => array(
  7.            'usuario' => array(
  8.                'id'     => 1,
  9.                'nombre' => 'Demo'
  10.            ),
  11.            'permisos' => array(
  12.            )
  13.        ),
  14.        'time' => time()
  15.    );
  16. }
  17.  
  18. if((time() - $_SESSION['time']) > 7200)
  19. {
  20.    // Sesión expirada
  21.  
  22.    // Elimina la sesión
  23.  
  24.    // Redirecciona al mismo script para renovar la sesión
  25.    header('Location: /index.php');
  26.  
  27.    // Finaliza el script (previene el escape de información)
  28.    exit;
  29. }


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: @XSStringManolo en 3 Noviembre 2019, 08:24 am
Solo añadir que debes poner siempre el session start al principio de todo porque si no, puede dar error.
Y que tambien puedes usar session unset en vez de session destroy.
Con destroy, borras todo el contenido de session, con unset se la quitas al usuario.

Por ejemplo imagínate que dejas al usuario estilizar tu página web para su perfil y se tira 2 horas configurando sus colores favoritos, fondo de la página, tamaño de texto, descripción... Está hablando por un chat, apuntó cosas... Y se le va la luz o el internet. Si haces destroy automático y el usuario no le dio a guardar, va a perder todo si no le dio a guardar.

En cambio si haces unset, toda la información la sigues teniendo en el servidor y cuando se loggea de nuevo puedes ponerle un mensaje:
"Tu última sesión se cerro inesperadamente". Botón RESTAURAR.


Título: Re: (Pregunta): Como hacer que una $_SESSION determinada dure 2 horas.
Publicado por: Leguim en 3 Noviembre 2019, 17:55 pm
Gracias manolo! buena aclaración!  ;D

Gracias a los tres.