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.
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
Julio Cesar Sanchez