> Faqs > Problema con sesiones

Problema con sesiones

Mi problema es que cuando cierro la sesion y redirigo a la pagina de login, este no me pide ni nombre de usuario ni contraseña y las variables de sesion vuleven a los valores de los usuario logueados.

Aunque esta un poco enredado con todas las modificaciones que e intentado, esta seria la pagina de entrada

Archivo index.php

 <?php 
 require_once '../clases/conexion.php';  
 if (!isset($_SERVER['PHP_AUTH_USER'])) {  
     header('WWW-Authenticate: Basic realm="My Realm"');  
     header('HTTP/1.0 401 Unauthorized');  
     include 'sinpermiso.php';  
     exit(0);  
 }  
 else{  
     $name=addslashes($_SERVER['PHP_AUTH_USER']);  
     $pass=addslashes($_SERVER['PHP_AUTH_PW']);  
     $query="SELECT * FROM administracion WHERE nombre='$name' and pass=SHA('$pass')";  
     $conexion = new Conexion();  
     $link = $conexion->conectar();  
     $result=mysql_query($query,$link) or die('La consulta falló: ' . mysql_error());  
     if(mysql_num_rows($result)!=1) {  
         header('WWW-Authenticate: Basic realm="My Realm"');  
         header('HTTP/1.0 401 Unauthorized');  
         include 'sinpermiso.php';  
         $conexion->desconectar();  
         exit (1);  
    }  else {  
         session_cache_limiter('nocache');  
         session_start();  
         $_SESSION["access"]=true;  
         $_SESSION["date"]= date("Y-n-j H:i:s");  
         $conexion->desconectar();  
         header("Location: inicio.php");  
         exit(0);  
    }  
 }  
 ?>  

el codigo lo he sacado tanto de la pagina de desarrollo web como de php.net aunque con algunas modificaciones.

el codigo con que comienzo cada pagina segura (lo hago con un include al principio de cada pagina) es:

Archivo control_session.php

 <?php 
 session_cache_limiter('nocache');  
 session_cache_expire(10);  
 session_start();  
 if ((!isset($_SESSION["access"]) ) || (!($_SESSION["access"]) ) ){  
    header ("Location: sinpermiso.php");  
    exit(1);  
 }  
 $date = $_SESSION['date'];  
 $nowdate = date("Y-n-j H:i:s");  
 $diftime = (strtotime($nowdate) - strtotime($date));  
 if($diftime >= 600) {  
    session_destroy();  
    header("Location: index.php");  
 }  
 else {  
    $_SESSION["date"] = $nowdate;  
 }  
 ?>  

y para cerrar

Archivo cerrar.php

<?php 
include 'control_sesiones.php';  
unset($_SERVER['PHP_AUTH_USER']);  
unset($_SESSION['access']);  
unset($_COOKIE["PHPSESSID"]);  
session_unset();  
session_destroy();  
header("Location: index.php");  
?>  

Se que esta un poco desordenado pero es que he intentado todo.
Espero me puedan ayudar

Respuestas

Ya vi cual es tu problema, tu problema es la variable PHP_AUTH_USER que
es un tipo de autenticacion basica basada en HTTP, necesitas ejecutar
PHP como modulo y se manipula mediante header para el envio de los
datos, el problema es que como tu mencionas es persistente y dependiendo
del navegador funciona o no. Prueba con libapache2-mod-auth-mysql para
lograr el efecto que quieres que es recopilar nombre de usuario y
contraseña mediante el cuadro de dialogo de autenticacion basica de apache.

Julio Cesar Sanchez