@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.