Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/09/2005, 10:29
Avatar de Gerifaltus
Gerifaltus
 
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 18 años, 10 meses
Puntos: 4
tienes razón el master, debi poner codigo cuanto postee este mensaje, pero aqui va:

1. tengo un index.php el cual solo tiene 2 cuadros de texto: login y password que direcciona a una segunda página :principal.php.

dentro de principal.php al principio del archivo inlcuyo otro archivo: filter.inc.php (tomado y modificado del Autentificado de CLUSTER), este archivo (filter.inc.php), se encarga de verificar el login y password, asì como de levantar las sesiones, a continuaciòn el script (con permiso de CLUSTER):

Código:
<?php
//$nom_s = "x";
// Motor autentificación usuarios.

// Cargar datos conexion y otras variables.
//include ('../Connections/sapb_librarian.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.
//con respecto a este "if", lo puse como comentario porque impide que habra algunos pop up's que uso en mi proyecto.
/*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['login']) && isset($_POST['pass'])) {

// 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.
$db_conexion= mysql_connect("localhost", "librarian", "sapb") or die(header ("Location:  $redir?error_login=0"));
mysql_select_db("sapb");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT CONCAT_WS(' ',nom_bibliot,ap_bibliot,am_bibliot) as b,login_bibliot,password_bibliot,puesto,id_bibliot FROM bibliotecario WHERE login_bibliot='".$_POST['login']."'") 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['login']);
    // encriptamos el password en formato md5 irreversible.
    $password = ($_POST['pass']);
    //$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ágina de error.
    if ($login != $usuario_datos['login_bibliot']) {
       	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['password_bibliot']) {
        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.
     //$idB = $usuario_datos['id_bibliot'];
     // le damos un mobre a la sesion.
    //session_name();
     // 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['id']=$usuario_datos['id_bibliot'];

    // definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    $_SESSION['puesto']=$usuario_datos['puesto'];

    //definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    $_SESSION['usuario_login']=$usuario_datos['login_bibliot'];

    //definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    $_SESSION['usuario_password']=$usuario_datos['password_bibliot'];
    
    //guardamos en una variable el nombre completo del bibliotecario
//    $_SESSION['nB']=$usuario_datos['nom_bibliot']." ".$usuario_datos['ap_bibliot']." ".$usuario_datos['am_bibliot'];
    $_SESSION['nB']=$usuario_datos['b'];

    // 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 sesión existe -------

// usamos la sesion de nombre definido.
//session_name(); 
// 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 incorrecto!");
exit;
}
}
?>
en las demas paginas (de hecho en casi todas) tambièn incluyo el filter.inc.php para validar las sesiones y las utilizo de la siguiente forma, como ejemplo:

Código:
<?php
   if ($_SESSION['puesto'] == 1) {
    echo "Administrador";
}else {
   echo "Bibliotecario";
}
?>
bien y para salir de la sesión simplemente en todas las paginas tengo un vinculo como este:

Código:
<td><a href="http://localhost/sapb/logout.php">Cerrar Sesión</a></td>
y el código del archivo logout.php es el siguiente (Basado en el logout de CLUSTER):

Código:
    <?php
session_start();
// destruimos la session de usuarios.
session_destroy();

header("Location: http://localhost/sapb/");
?>
<html>
<head>
<title></title></head>
<body>
</body>
</html>
ahora los comentarios:

2. estos son los archivos que estoy usando y ayer (especificamente en la noche los modifique, y quedaron como estan aqui).

la estructura de la web es asì

sapb/ => el sitio web.
sapb/index.php
sapb/logout.php
sapb/principal.php
sapb/altas/ => subcarpetas del web
sapb/altas/a_Librarian => modulo de altas de bibliotecario.

de algo que me di cuenta es que cuando mandaba a cerrar la sesion desde otra pagina que no fuese la principal.php como por ejemplo: localhost/sapb/altas/a_Librarian.php, no borraba la sesion, lo digo por que me iba a la carpeta sessions y verificaba. por lo tanto decidi hacerlo directamente y en lugar de direccionar en el vinculo de cerrar sesiòn hacia logout.php, lo hacia directamente a index.php con este còdigo al principio de index:
codigo del vinculo para cerrar sesion:
Código:
  <td><a href="http://localhost/sapb/index.php?logout=true">Cerrar Sesión</a></td>
codigo al principio del index.php:
Código:
  <?php
   if ($_GET[logout] == "true") {
   //aqui inicio la sesion o la recupero si ya hay otra
   session_start();
   //aqui la elimino
   session_destroy();
}
?>
ahora no se si desde cualquier pagina (me refiero a la profundidad de las carpetas) se puede cerrar sesion???

otra cosa que sucedio es que cuando termine de modificar estos archivos, me quede en la maquina, pero ya habia iniciado sesion e incluso vi el archivo sess_edf15454..... en la carpeta sessions, el tiempo que tarde en no hacer nada en la maquina fue de aproximadamente 3 horas, luego intente cerrar sesiòn pero el archivo no se borro ¿¿¿????.

bien, espero me haya hecho entender y pueda contar con su ayuda, de ante mano gracias.