2009-07-22 15 views
26

Duplicar posible:
HTTP authentication logout via PHP¿Cómo desconectarse cuando se utiliza la autenticación .htaccess (y .htpasswd)?

Hola

tengo una cierta funcionalidad en mi sitio web protegido mediante .htaccess y .htpasswd. Cuando los usuarios intentan acceder a este, reciben un mensaje rápido para ingresar detalles. Ingresan sus detalles y entran y pueden ver cosas, etc. Todo funciona bien.

Mi pregunta es cómo puedo crear una funcionalidad logout para este tipo de autenticación. Sé que pueden cerrar la ventana del navegador para "Cerrar sesión". Pero esto no es ideal. ¿Qué me recomendarías?

Gracias.

+0

Se le ha preguntado antes, p. ver http://stackoverflow.com/questions/449788/http-authentication-logout-via-php – VolkerK

+0

No hay ningún tipo de implementación sin escribir algunas líneas para eliminar la sesión o restablecer los encabezados. Pruebe el enfoque directo. http://blog.acpmasquerade.com/2011/09/basic-http-authentication-straight.html#more – acpmasquerade

Respuesta

31

navegadores por lo general no son compatibles con este tema, consulte How do I log out?

Dado que los navegadores empezaron implementar la autenticación básica, administradores de sitios web han querido sabe cómo hacer que la sesión del usuario. Desde el navegador almacena en caché el nombre de usuario y contraseña con el dominio de autenticación , tal como se describe anteriormente en este tutorial, esto no es una función de la configuración del servidor, pero es una pregunta de conseguir que el navegador olvidar la información de credenciales , entonces que la próxima vez que se solicite el recurso , el nombre de usuario y la contraseña se deben volver a suministrar. Hay numerosas situaciones en las que esto es deseables, tales como cuando se utiliza un navegador en un lugar público, y no que desean salir del navegador registra en , para que la próxima persona puede obtener en su cuenta bancaria.

Sin embargo, aunque esto es quizás el pregunta más frecuente sobre autenticación básica, hasta el momento ninguno de los principales fabricantes de navegadores tienen visto esto como una característica deseable poner en sus productos.

En consecuencia, la respuesta a esta pregunta es, no se puede. Lo siento.

Existen extensiones de navegador que le permiten borrar la autenticación HTTP de un sitio. Para Firefox, la extensión WebDeveloper (que es una de mis extensiones preferidas de todos modos) ofrece esta característica. El menú para esto es Miscellaneous/Clear Private Data/HTTP Authentication.

+0

Ah, ya veo ... gracias. – TigerTiger

+5

La forma predeterminada de Firefox de cerrar la autenticación HTTP está disponible en "Herramientas"> "Borrar historial reciente ...", como casilla de verificación "Inicios de sesión activos". Esto no es intuitivo ni le permite desconectarse solo de un dominio, siempre cierra la sesión de cada página. – aef

19

Probado en firefox y cromo. Lo que puede hacer es enviar al usuario al http://logout:[email protected]. Esto reemplazará su nombre de usuario/contraseña actual con logout/logout (podría ser cualquier combinación de usuario/pase inválida) y dado que ahora tienen el nombre de usuario/contraseña incorrectos, tendrán que iniciar sesión de nuevo para acceder al sitio.

En ópera esto no funciona, porque puede tener varios nombres de usuario/contraseñas al mismo tiempo. Tampoco funcionó en IE porque IE no parece ser compatible con las URL http://username:[email protected].

+9

Según RFC 3986 (URI: sintaxis genérica) sección 3.2.1. (Información del usuario) el uso de 'user: password @ host' está en desuso. El uso de 'http: // logout @ yourserver.example.com /' no es correcto y debería funcionar en la mayoría de los casos. – aef

+1

cromo también puede – apis17

+0

esto funcionó para mí en cromo hoy, cosas geniales, gracias chicos! –

2

Es posible cerrar la sesión. Debe implementar la página de cierre de sesión, que devolverá el HTTP 401, hasta que el usuario ingrese la información de inicio de sesión BAD y luego lo redireccione a otro lugar. El navegador recuerda la última información de inicio de sesión aceptada y, por lo tanto, anula el inicio de sesión correcto.

Pero esto es inutilizable, porque necesita la cooperación del usuario.

2

Me encontré con este problema hace varios años. Es increíblemente frustrante descubrir que hay un problema que todos tienen y nadie parece querer resolverlo de manera general.

Como se indica en Inadequate Logout functionality in HTTP Authentication Creo que la respuesta es cambiar el RFC para permitir tiempos de espera y admitir un botón de cerrar sesión. La sugerencia adicional del autor de que el servidor pueda enviar un encabezado "desconectarse" en realidad eliminaría la necesidad de cualquier soporte de agente de usuario cliente ya que los sitios web podrían simplemente incluir un enlace en una página web a una URL que devuelva el código de respuesta necesario y/o encabezado para invalidar la sesión actual.

Cuestiones relacionadas