Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/11/2005, 12:11
Avatar de gonzalezmfrank
gonzalezmfrank
 
Fecha de Ingreso: julio-2005
Ubicación: Maracaibo - Venezuela
Mensajes: 266
Antigüedad: 18 años, 9 meses
Puntos: 0
Bueno...

En principio no me interesaba perder la pagina desde la cual estaba haciendo referencia por lo cual decidi incluir las variables $user_mail y $user_pass para cuando viniese el acceso via LINK y no como resultado de un FORM

Código PHP:
<?

include("config.php");

// chequear página que lo llama para devolver errores a dicha página.

$url explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == "") {
   if (isset(
$user_mail) && isset($pass_mail)) {
      
$redir=$urlhome.'/index.php';
   } else {
      die (
"Error cod.:1 - Acceso incorrecto!");
      exit;
   }
}

// Chequeamos si se está autentificandose un usuario por medio del formulario o link
if (((isset($_POST['user']) && isset($_POST['pass']))) or (isset($user_mail) && isset($pass_mail))) {

// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
require ("conectar.php");

// dependiendo de si viene del mail o de la session
if (isset($_POST['user']) && isset($_POST['pass'])) {
   
$user_id strtoupper($_POST['user']);
   
$pass_id strtoupper($_POST['pass']);
   
$login strtoupper(stripslashes($_POST['user']));
} else {
   
// aca debe venir solo del link
   
$user_id $user_mail;
   
$pass_id $pass_mail;
   
$login $user_mail;
}

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT ID,usuario,pass,nivel_acceso,fecha_pass,status FROM $sql_clientes WHERE usuario='$user_id'") 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 = strtoupper(stripslashes($_POST['user']));
    // encriptamos el password en formato md5 irreversible.
    
$password md5($pass_id);
    if ( isset(
$_POST['pass']) ) {
       
$passwordv $_POST['pass'];
    } else {
       
$passwordv $pass_id;
    }

    
// 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ágina 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ágina de error
    
if ( $password != $usuario_datos['pass'] and $passwordv != $usuario_datos['pass'] ) {
        
Header ("Location: $redir?error_login=3");
        exit;}
    
    
// Revisamos las fecha del dia con la fecha de registro de la BD
    // si  el password tiene generado 30 dias o mas, redirecciona hacia la pagina de error
    
$date1=date("Y-m-d");
    
$date2=$usuario_datos['fecha_pass'];
    
$s1 strtotime($date1)-strtotime($date2);
    
$d1 intval($s1/86400);
    
$d2 30 $d1;
    if (
$d1 >= 30) {
        
Header ("Location: $redir?error_login=7");
        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ágina.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas 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 autentica que servirá como segunda validacion de autenticacion del usuario
    
$_SESSION['usuario_autentica']=$usuario_datos['status'];
    
    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_datos['pass'];
    
$_SESSION['usuario_passwordval']=$passwordv;
    
    
//definimos cambiar_password con el valor 1 si es necesario que se cambie el password
    //Si faltan 10 dias o menos para que expire el password emite el error indicando en la variable $d2 el numero de dias que le quedan
    
if ($d2 <= 10) {
        
$_SESSION['cambiar_password']=1;
        
Header ("Location: $redir?error_login=8&d2=$d2");
        exit;}
        
    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    
if ( isset($_POST['pass']) ) {
       
$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 sesión 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 sesión de identificación 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 no autorizado!");
exit;
}
}
?>
Esto tomando en cuenta que los datos que vienen del link vendrán con las mismas caracteristicas de las ques están en la Base de Datos

Espero te sirva... si tienes alguna observacion por favor indicamela

Saludos

Frank