entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Expiración de sesiones en PHP

Hola.

Tras ver que las sesiones de mi web duraban 24 minutos (lo decía en segundos) procedí a cambiarla por un valor más elevado. Lo hice a través del php.ini:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
; http://php.net/session.gc-maxlifetime
session.gc_maxlifetime=Acá mi valor

Lo que ahora me gustaría saber, al momento de hostear mi proyecto, ¿en qué parte tendría la opción de editar este mismo archivo? Ya que ahora mismo lo tengo dentro de la carpeta php en XAMPP, y luego aparte todos los archivos del sitio en htdocs.

enter image description here

Saludos.

2votos

carlossevi comentado

¿Dónde lo vas a hostear? ¿Alojamiento privado o compartido? ¿Gestionado por ti? Depende de TODO.

2 Respuestas

2votos

bl4z3r Puntos16850

@KevinLeyes el acercamiento correcto a tu problema no es modificando el archivo php.ini, ya que este representa la configuracion global del servidor; por ende, si se modifica este archivo, el impacto de esta modificación se notara en todas las webs alojadas en el servidor, si no que es a través desde el código.

Modificar el tiempo de sesión se puede hacer de la siguiente manera. En el formulario puede colocar un campo hidden, con un checkbox ó indicar el tiempo de la sesión con un valor predeterminado. Si el usuario necesita modificar ese tiempo, puede hacerlo desde ese campo.
Te voy a mostrar los 3 ejemplos:

  • Con hidden:
    <form name="frmLogin" action="login.php" method="post">
    <label for="txtUsuario">Usuario:
        <input name="txtUsuario" type="text" >
    </label>
    <label for="txtPassword">Contraseña:
        <input name="txtPassword" type="password" >
    </label>
    <input name="hidDuracionSesion" type="hidden" value="86400" >
    <input name="btnEnviar" type="submit" >
    <input name="btnLimpiar" type="reset" >
    </form>
  • Con chechbox:
    <form name="frmLogin" action="login.php" method="post">
    <label for="txtUsuario">Usuario:
        <input name="txtUsuario" type="text" >
    </label>
    <label for="txtPassword">Contraseña:
        <input name="txtPassword" type="password" >
    </label>
    <label for="chkEterno">Mantener activa:
        <input name="chkEterno" type="checkbox" >
    </label>
    <input name="btnEnviar" type="submit" >
    <input name="btnLimpiar" type="reset" >
    </form>
  • Con indicación de duración:
    <form name="frmLogin" action="login.php" method="post">
    <label for="txtUsuario">Usuario:
        <input name="txtUsuario" type="text" >
    </label>
    <label for="txtPassword">Contraseña:
        <input name="txtPassword" type="password" >
    </label>
    <label for="txtDuracion">Duracion:
        <input name="txtDuracion" type="numeric" value="86400" >
    </label>
    <input name="btnEnviar" type="submit" >
    <input name="btnLimpiar" type="reset" >
    </form>

y el PHP de todo esto puede ser algo así:

<?php

session_start(); // obtiene o genera la cookie de session.

$usuario = filter_input_var("txtUsuario", INPUT_POST);
$password = filter_input_var("txtPassword", INPUT_POST);
$duracion = filter_input_var("hidDuracionSesion", INPUT_POST); // Si es con hidden
$duracion = filter_input_var("chkEterno", INPUT_POST); // Si es con chk
$duracion = filter_input_var("txtDuracion", INPUT_POST); // Si es un txt

// validaciones de que si no esta vacio lo qe se manda
if(!empty($usuario) or !empty($password) or !empty($duracion))
{
    return;
}

// verifico que exista la var para la expiracion
if(is_set($_SESSION["expisa"]) and !empty($_SESSION["expira"]))
{
    $_SESSION["expira"] = $duracion;
}

// verifico que no me haya excedido del tiempo de expiracion.
if(time() - $_SESSION["expira"] > 0)
{
    // se excedio
}
else
{
    // si no se excedio creo las var de session, verifico user y pass
    if($user != $dbUser or $password != $dbPassword)
    {
        return;
    }

    $_SESSION["expira"] = time() + $duracion;
}

header("Location: index.php");

?>

Advierto que esto es un prueba de concepto. Es muy posible que no ande ya que no lo probé.

Otra de las cosas que se tiene que cabe mencionar es que hay que verificar como esta configurado el PHP de tu servidor (sea local o no). La configuracion de tu aplicacion debe adaptarse al servidor y no el servidor a tu aplicacion.

2votos

ankeorum Puntos7210

Estimado @KevinLeyes; si vas a alojar tu proyecto en un servidor que no tienes físicamente a tu alcance (está por ahí en el internet) probablemente no tendrás acceso al php.ini del servidor y cualquier cambio tendrá que ser solicitado mediante el botón de soporte técnico de tu alojamiento que, si aprecian a sus clientes, solventarán en poco tiempo. Hay muchos de los parámetros del php.ini que tengas en tu local que aún contactes con "soporte" no pondrán lo que tu quieras puesto que algunos parámetros pueden vulnerar la seguridad del servidor al completo. En el caso de alojar tu mismo tu web porque montes un servidor web tu mismo lo tendrás mucho más fácil porque el mismo IIS (si usas windows) sirve el php.ini que tu le digas en las opciones; permitiéndote así que utilices los parámetros que tu necesites.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta