1)
Tiempo de expiración de una sesión
Se que las directivas del php.ini que afectan al tiempo de expiración de una
sesión (por defecto) son (principalmente):
session.gc_maxlifetime = 2880 (expresado en segundos) en mi caso
session.cache_expire = 1800 (expresado en segundos) en mi caso
Aun asi las sesiones expiran rapidamente, por ejemplo si el usuario deja inactivo la pagina y despues de 3 o 5 min la sesion termina.
2)
El segundo tema va por la restriccion de una sesion activa por usuario, es decir no deberian haber mas de 1 usuario conectado con la misma cuenta.
Adjunto un par de scripts que estoy utilizando(los principales):
aut_verifica.inc.php
Código:
aut_config.inc.php// Motor autentificacin usuarios. // Cargar datos conexion y otras variables. require ("aut_config.inc.php"); // chequear p�ina que lo llama para devolver errores a dicha p�ina. $url = explode("?",$_SERVER['HTTP_REFERER']); $pag_referida=$url[0]; $redir=$pag_referida; // chequear si se llama directo al script. if ($_SERVER['HTTP_REFERER'] == ""){ die ("Error cod.:1 - Acceso incorrecto!"); exit; } // Chequeamos si se est�autentificandose un usuario por medio del formulario if (isset($_POST['user']) && isset($_POST['pass'])) { // Conexin base de datos. // si no se puede conectar a la BD salimos del scrip con error 0 y // redireccionamos a la pagina de error. $db_conexion= mysql_connect("$sql_host", "$sql_usuario", "$sql_pass") or die(header ("Location: $redir?error_login=0")); mysql_select_db("$sql_db"); // realizamos la consulta a la BD para chequear datos del Usuario. $usuario_consulta = mysql_query("SELECT ID,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['user']."'") or die(header ("Location: $redir?error_login=1")); // miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario) if (mysql_num_rows($usuario_consulta) != 0) { // eliminamos barras invertidas y dobles en sencillas $login = stripslashes($_POST['user']); // encriptamos el password en formato md5 irreversible. $password = md5($_POST['pass']); // almacenamos datos del Usuario en un array para empezar a chequear. $usuario_datos = mysql_fetch_array($usuario_consulta); // liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array. mysql_free_result($usuario_consulta); // cerramos la Base de dtos. mysql_close($db_conexion); // chequeamos el nombre del usuario otra vez contrastandolo con la BD // esta vez sin barras invertidas, etc ... // si no es correcto, salimos del script con error 4 y redireccionamos a la // p�ina de error. if ($login != $usuario_datos['usuario']) { Header ("Location: $redir?error_login=4"); exit;} // si el password no es correcto .. // salimos del script con error 3 y redireccinamos hacia la p�ina de error if ($password != $usuario_datos['pass']) { Header ("Location: $redir?error_login=3"); exit;} // Paranoia: destruimos las variables login y password usadas unset($login); unset ($password); // En este punto, el usuario ya esta validado. // Grabamos los datos del usuario en una sesion. // le damos un mobre a la sesion. session_name($usuarios_sesion); // incia sessiones session_start(); // Paranoia: decimos al navegador que no "cachee" esta p�ina. session_cache_limiter('nocache,private'); // Asignamos variables de sesin con datos del Usuario para el uso en el // resto de p�inas autentificadas. // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios $_SESSION['usuario_id']=$usuario_datos['ID']; // definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios $_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso']; //definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios $_SESSION['usuario_login']=$usuario_datos['usuario']; //definimos usuario_password con el password del usuario de la sesin actual (formato md5 encriptado) $_SESSION['usuario_password']=$usuario_datos['pass']; // Hacemos una llamada a si mismo (scritp) para que queden disponibles // las variables de session en el array asociado $HTTP_... $pag=$_SERVER['PHP_SELF']; Header ("Location: $pag?"); exit; } else { // si no esta el nombre de usuario en la BD o el password .. // se devuelve a pagina q lo llamo con error Header ("Location: $redir?error_login=2"); exit;} } else { // -------- Chequear sesin existe ------- // usamos la sesion de nombre definido. session_name($usuarios_sesion); // Iniciamos el uso de sesiones session_start(); // Chequeamos si estan creadas las variables de sesin de identificacin del usuario, // El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras // con el navegador. if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){ // Borramos la sesion creada por el inicio de session anterior session_destroy(); die ("Error cod.: 2 - Acceso incorrecto!"); exit; } }
Código:
// Configuracin // Nombre de la session (puede dejar este mismo) $usuarios_sesion="autentificator"; // Datos conexin a la Base de datos (MySql) $sql_host="localhost"; // Host, nombre del servidor o IP del servidor Mysql. $sql_usuario="root"; // Usuario de Mysql $sql_pass=""; // contrasea de Mysql $sql_db="bd1"; // Base de datos que se usar $sql_tabla="usuarios"; // Nombre de la tabla que contendra los datos de los usuarios