Estoy utilizando sesiones y mi problema es:
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:
// 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;
}
}
aut_config.inc.php
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