Solución:
Las sesiones en PHP funcionan con una sesión de tipo Cookie, mientras que en el lado del servidor la información de la sesión se elimina constantemente.
Para establecer el tiempo de vida en php, puede usar la función session_set_cookie_params, antes de session_start:
session_set_cookie_params(3600,"https://foroayuda.es/");
session_start();
Por ejemplo, 3600 segundos es una hora, durante 2 horas 3600 * 2 = 7200.
Pero es una cookie de sesión, el navegador puede caducarla por sí mismo, si desea guardar sesiones de mucho tiempo (como recordar el inicio de sesión), debe guardar los datos en el servidor y una cookie estándar en el lado del cliente.
Puedes tener una Mesa “Sesiones”:
- session_id int
- session_hash varchar (20)
- texto de datos de sesión
Y al validar una cookie, guarda la “identificación de sesión” y el “hash” (por seguridad) en el lado del cliente, y puede guardar los datos de la sesión en el lado del servidor, por ejemplo:
Al iniciar sesión:
setcookie('sessid', $sessionid, 604800); // One week or seven days
setcookie('sesshash', $sessionhash, 604800); // One week or seven days
// And save the session data:
saveSessionData($sessionid, $sessionhash, serialize($_SESSION)); // saveSessionData is your function
Si el usuario regresa:
if (isset($_COOKIE['sessid'])) {
if (valide_session($_COOKIE['sessid'], $_COOKIE['sesshash'])) {
$_SESSION = unserialize(get_session_data($_COOKIE['sessid']));
} else {
// Dont validate the hash, possible session falsification
}
}
Obviamente, guarde todas las llamadas de sesión / cookies, antes de enviar datos.
Establezca los siguientes parámetros de php al mismo valor en segundos:
session.cookie_lifetime
session.gc_maxlifetime
en php.ini, .htaccess o por ejemplo con
ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);
por un día.
Enlaces:
http://www.php.net/manual/en/session.configuration.php
http://www.php.net/manual/en/function.ini-set.php
Antes de PHP 7, la función session_start () no aceptaba directamente ninguna opción de configuración. Ahora puedes hacerlo de esta manera
<?php
// This sends a persistent cookie that lasts a day.
session_start([
'cookie_lifetime' => 86400,
]);
?>
Referencia: https://php.net/manual/en/function.session-start.php#example-5976