Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cerrar sesion de usuario

Estas en el tema de Cerrar sesion de usuario en el foro de PHP en Foros del Web. Hola amigos. Se que este es un tema muy tratado y con múltiples formas de hacerlo, sin embargo no logro encontrar la forma de escribir ...
  #1 (permalink)  
Antiguo 09/01/2014, 05:26
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Cerrar sesion de usuario

Hola amigos.

Se que este es un tema muy tratado y con múltiples formas de hacerlo, sin embargo no logro encontrar la forma de escribir el código para que me funcione.

Encontré este script que me funciona perfectamente ya que no deseo utilizar base de datos y lo tengo en la página donde tengo que restringir el acceso:

Código PHP:
<?
// Autentifacion Multiple/Basica Utilizando $_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW']
// By DeeRme
// http://deerme.org

// Listado de Usuarios Permitidos
$lista[0]['user']='usuario';
$lista[0]['pw']='contraseña';

$lista[1]['user']='usuario2';
$lista[1]['pw']='contraseña2';

function 
autentificar($u,$p)
{
     global 
$lista;
     foreach (
$lista as $datos)
     {
          if ( (
$datos['user'] == $u) AND ($datos['pw'] == $p)   )
          {
               return 
TRUE;
        }
    }
    return 
FALSE;     
}
    
// $PHP_AUTH_USER,$PHP_AUTH_PW
    
$user $_SERVER['PHP_AUTH_USER'];
    
$pass $_SERVER['PHP_AUTH_PW'];
    if ( !
autentificar($user,$pass) )
    {
        
header('WWW-Authenticate: Basic realm="Acceso restringido"');
        
header('HTTP/1.0 401 Unauthorized');
        echo 
'Autentifacion No Valida';
        exit;
    }
    
// Contiuamos la Carga del Sitio
?> 

<?php
El caso es que quisiera poner un link para desconectar y he probado con una página desconectar.php en la cual he insertado el código

Código PHP:
 <?php
    session_destroy
();
    
header("Location: index2.php");
?>
mas otros tantos que he probado y no funciona, también lo he tratado de poner en una funcion desde la misma página y también me da error.

El caso es que no se si este código agrega cookie o sólo trabaja con el valor de la variable global.

También he probado a poner las variables a cero:

Código PHP:
$lista[0]['user']='';
$lista[0]['pw']='';

$lista[1]['user']='';
$lista[1]['pw']=''
y recargar la página pero tampoco funciona.

¿Alguien podría ayudarme a solucionarlo con el procedimiento correcto?

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 09/01/2014, 05:30
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Cerrar sesion de usuario

Antes de session_destroy(), prueba a poner session_start(). Algo así:

Código PHP:
Ver original
  1. header('Location: index.php');
  #3 (permalink)  
Antiguo 09/01/2014, 06:00
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Cerrar sesion de usuario

Gracias, ya lo había probado en el archivo desconectar.php y me devuelve este error:
No se puede enviar limitador de caché de sesión y me saca error en la línea 1 y en la 2.

Código PHP:
 <?php
    session_start
();
    
session_destroy();
    
header('Location: index.php');
?>
A todo esto creo que trabaja con cookies porque al cabo de un rato se desconectó solo, ¿no habría alguna forma de borrar esa cokkie?, ¿se desconectaría si se borra?, es otra posibilidad ¿no?

Gracias y saludos.
  #4 (permalink)  
Antiguo 09/01/2014, 07:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 8
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Cerrar sesion de usuario

El sistema que usas para la autentificacion no usas ni cookies ni las sesiones de php.

Normalmente con este sistema el usuario solo cierra sesión al cerrar el navegador, una forma de forzar el cierre de sesión es que vuelvas a enviar:

Código PHP:
<?php
header
('WWW-Authenticate: Basic realm="Acceso restringido"'); 
header('HTTP/1.0 401 Unauthorized'); 
echo 
'Autentifacion No Valida'
exit;
Aunque también provoca que al usuario le aparezca otra vez la ventana para introducir el usuario y la contraseña.
  #5 (permalink)  
Antiguo 09/01/2014, 07:59
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Cerrar sesion de usuario

Bueno, lo que hice es crear una función para llamarla cuando se haga clic en el link de cerrar y lo he puesto en la misma página que debo cerrar el acceso:


Código PHP:
<?php 
function cerrar(){
header('WWW-Authenticate: Basic realm="Acceso restringido"'); 
header('HTTP/1.0 401 Unauthorized'); 
echo 
'Autentifacion No Valida'
exit;
    }
?>

Luego en el html he puesto este link:

Código PHP:
<a href="<?php echo cerrar(); ?>">Cerrar</a>
pero no hace nada, supongo que tengo más errores que los permitidos y no se muy bien lo que tengo que hacer.

Por otro lado, he cerrado el navegador completamente y he vuelto a entrar a la página sin ningún problema, todavía estaba como usuario autorizado.

Entonces si la función está bien ¿cómo la llamo desde el link?
  #6 (permalink)  
Antiguo 09/01/2014, 10:00
 
Fecha de Ingreso: noviembre-2009
Mensajes: 8
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Cerrar sesion de usuario

Tendrías que crear un archivo llamado cerrarSesion.php con el código:
Código PHP:
<?php
header
('WWW-Authenticate: Basic realm="Acceso restringido"'); 
header('HTTP/1.0 401 Unauthorized'); 
echo 
'Autentifacion No Valida'
exit;
Y luego desde donde quieras poner el enlace:
Código PHP:
<a href="cerrarSesion.php">Cerrar</a
  #7 (permalink)  
Antiguo 09/01/2014, 12:14
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Cerrar sesion de usuario

¡¡¡ PERFECTO !!!

Exactamente, eso es lo que quería, ahora funciona de maravilla, llevaba dos días tratando de hacerlo funcionar pero no daba con la tecla.

Muchas gracias a DandyCC y alfa5 por ayudarme a solucionarlo.

Que tengáis un feliz año nuevo 2014.

Etiquetas: cerrar, usuario, usuarios, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:45.