Cambiar la duración de la sesión en PHP
Cambiar la duración de la sesión en PHP. En PHP, las sesiones se generan para verificar si el usuario está activo. Sin embargo, si el usuario se vuelve inactivo y/o se olvida de cerrar sesión en la página web, existe la posibilidad de que otros usuarios vean la página y provoquen una brecha de seguridad.
Para evitar estos inconvenientes, PHP de forma predeterminada destruye la sesión cuando se cierra el navegador y/o pasado un tiempo predeterminado.
El tiempo de espera de la sesión se puede personalizar para que la página del usuario esté inactiva después de un tiempo fijo.
Cambiar la duración de la sesión en PHP
Inicio de sesión: La función PHP, session_start()
se utiliza para iniciar una sesión en la página web.
Sintaxis:
session_start();
Variables de sesión PHP
Después del inicio de la sesión, se pueden crear variables de sesión para uso futuro. Las variables de sesión se pueden crear y los valores se pueden almacenar en esas variables de la siguiente manera:
Crear una variable de sesión con el nombre de variable ‘variable1
‘ y asignarle el valor de ’50’ se puede hacer de la siguiente manera:
$_SESSION['variable1'] = 50;
Asignar variable a una variable de sesión
La asignación de una variable a una variable de sesión se puede hacer declarando de la siguiente forma:
$usuario = "Juan";
$_SESSION['usuario'] = $usuario;
Formas de destruir una variable de sesión
Destruir las variables de sesión y la sesión: Para eliminar todas las variables de sesión que se inicializan antes de destruir la sesión, se debe usar el siguiente comando:
Eliminar sesión personalizada
Si se desea eliminar solo una determinada variable de sesión se debe de utilizar la siguiente función php
unset($_SESSION['session_var']);
Borrar datos de las variables de sesión
Simplemente borre todos los datos de todas las variables de sesión y se debe usar el siguiente comando:
session_unset();
Borrar y/o destruir la sesión
Para destruir la sesión completa, se debe usar el siguiente comando:
session_destroy();
Cambiar el tiempo de espera de la sesión:
Teniendo en cuenta que hay una página de inicio de sesión con el botón «Iniciar sesión
» en un formulario HTML
. Cuando el usuario hace clic en el botón «Iniciar sesión
«, se inicia la sesión y se establecen las variables de la sesión.
Se inicializa una variable de sesión para almacenar la hora de inicio de sesión. A continuación, se dirige a la página de inicio del usuario.
Página de inicio de sesión:
<?php
// Session starts
session_start();
$username = $_POST["username"];
if(isset($_POST["Login"])) {
// Session Variables are created
$_SESSION["user"] = $username;
// Login time is stored in a session variable
$_SESSION["login_time_stamp"] = time();
header("Location:homepage.php");
}
?>
En la página de inicio, para mantener la sesión, se llama a la función session_start()
. Esto nos permite recuperar variables de sesión de esta página.
Ampliar la vida de la sesión con la función time()
Usando la función time()
, se puede calcular la hora actual. La diferencia entre la hora actual y la variable de sesión creada en el momento del inicio de sesión no debe exceder el tiempo de espera deseado.
Cuando se excede la duración, la sesión se destruye y la página se redirige a la página de inicio de sesión.
Si el tiempo de espera de la sesión = 10 minutos. La sesión debería destruirse automáticamente después de 10 minutos = 10*60 segundos = 600 segundos
Página de inicio:
<?php
session_start();
// To check if session is started.
if(isset($_SESSION["user"]))
{
if(time()-$_SESSION["login_time_stamp"] >600)
{
session_unset();
session_destroy();
header("Location:login.php");
}
}
else
{
header("Location:login.php");
}
?>
Segunda forma: Aumente el tiempo de espera de la sesión en PHP
Puede establecer un límite en el tiempo de la sesión creada modificando algunos parámetros. Por lo tanto, se debe establecer session.gc_maxlifetime
junto con session_set_cookie_params
establecer parámetros de cookies debería funcionar.
Ejemplo de configuración y debería quedar así.
<?php
// server should keep session data for AT LEAST 1 hour
ini_set('session.gc_maxlifetime', 3600);
// each client should remember their session id for EXACTLY 1 hour
session_set_cookie_params(3600);
Ejemplo completo usando formulario y sesiones PHP
Vamos a crear un formulario de inicio de sesión, desde el cual un usuario puede iniciar sesión en su cuenta. Para ello disponemos de nuestra base de datos en phpMyAdmin
con el nombre “autenticación
”.
En esta base de datos tenemos una tabla llamada “usuarios
” que tiene la lista de todos los nombres de usuario registrados y su contraseña.
Primero, necesitamos establecer nuestra conexión con la base de datos. (db_conect.php)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "authentication";
// create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
if ($conn) {
# code...
// echo "Connecton Open";
}
else
echo "Connection failed";
?>
Fichero index.php
Nuestro archivo principal es index.php
, que tiene un formulario de inicio de sesión simple. Por lo tanto, el usuario debe ingresar su credencial para poder acceder a la página de inicio del sitio Web.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap
/4.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="index.css">
<title>Log in</title>
</head>
<body>
<div class="wrapper mx-auto mt-5">
<h2 class="text-center mb-4">LOG IN</h2>
<form method="POST" action="conexion.php">
<div class="row">
<div class="col-12">
<input type="text" class="form control" placeholder="User Name"
name="username" required>
</div>
<div class="col-12 mt-3">
<input type="password" class="form-control" placeholder="Password"
name="password" required>
</div>
</div>
<input type="submit" name="login" class="btn btn-secondary mt-4 w-100
login-btn" value="Log In" >
</form>
</div>
</body>
</html>
Cuando un usuario hace clic en el botón Iniciar sesión, las credenciales se comparan con el registro de nuestra base de datos para saber si el usuario está registrado o no.
Fichero conexion.php
La información enviada por el formulario será procesada en conexion.php y si los valores del usuario coinciden, entonces se inicia la sesión y se establecen las variables de la sesión.
Además, se crea una variable de sesión $_SESSION['start']
para almacenar la hora de inicio de sesión. Otra variable $_SESSION[‘expire’]
calcula el tiempo que usaremos para destruir nuestra sesión.
Tiempo de vida de una variable de sesión PHP
Si la validación de usuario y contraseña son correctos se crean las sesiones y se establecen valores de inicio y fin. Además, multiplicamos de 40 minutos por 60 para convertirlos en segundos (puede cambiar el valor de 40 minutos según sus necesidades).
A continuación, se dirige a la página de inicio del sitio web.
<?php
include("connection.php");
error_reporting(0);
if($_POST['login']) {
$un=$_POST['username'];
$pass=$_POST['password'];
$query = "SELECT * FROM USERS WHERE user_name='$un' AND password='$pass'";
$data = mysqli_query($conn,$query);
$total = mysqli_num_rows($data);
if($total != 0) {
session_start();
$_SESSION['auth'] = true;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (40 * 60);
header('location:homePage.php');
echo "run";
} else {
?>
<script>
alert("user name or password is invalid");
</script>
<?php
}
}
Página de inicio de sesión
- En la página de inicio, se llama a la función
session_start()
para mantener la sesión. Por lo tanto, nos permite obtener variables de sesión de la página. - Se mantiene una declaración
if()
para verificar que alguien no esté tratando de acceder directamente a la página sin iniciar sesión. - Si este es el caso, la URL redirigirá automáticamente a la página de inicio de sesión.
- Si el usuario ya inició sesión, la hora actual se almacena en una variable
$currentTim
e. El tiempo actual no debe exceder el tiempo de espera deseado que calculamos previamente en la página «index.php
«. - Cuando la duración supera la sesión, se destruye y se redirige a la página de inicio de sesión.
<?php
include("connection.php");
error_reporting(0);
session_start();
if(!$_SESSION['auth']) {
header('location:index.php');
}
else {
$currentTime = time();
if($currentTime > $_SESSION['expire']) {
session_unset();
session_destroy();
header('location:index.php');
}
else {
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4
.4.1/css/bootstrap.min.css">
<link rel="stylesheet" href="index.css">
<title>Home Page</title>
</head>
<body>
<div class="row no-gutters d-flex justify-content-end pr-3">
<a href="logout.php" class="logout">
<input type="submit" name="login" class="btn btn-secondary mt-3"
value="Log Out">
</a>
</div>
<h1 class="text-center">Welcome to the Home Page</h1>
</body>
<?php
}
}
?>
</html>
Cerrar sesión PHP
A continuación, se muestra el script de cierre de sesión de PHP que se utiliza si alguien quiere cerrar sesión en la página antes de que se agote el tiempo de espera de la sesión. El archivo puede tener un nombre similar a logout.php
<?php
session_start();
session_unset();
session_destroy();
header('location:index.php');
?>
Conclusiónes y recomendaciones:
Las sesiones y la creación de una sesión en PHP se considera un punto imprescindible en un sitio web.
En el mundo de la inteligencia artificial, casi todos los sitios tienen un sistema para autenticar a sus usuarios, y podría haber diferentes escenarios en los que el propietario del sitio web quiera crear una sesión de PHP por un período específico.
En este artículo, hemos visto cómo aumentar el tiempo de espera de la sesión en PHP con dos super ejemplos completos.