Eliminar la cookie del navegador manualmente o con plugins

Cómo añadir un botón en WordPress para cerrar sesión en páginas protegidas por contraseña

En WordPress, cuando protegemos una pagina o entrada con contraseña, se genera una cookie (un pequeño archivo con información) que queda guardada en el ordenador del usuario durante algún tiempo (10 días, concretamente), hasta que expira, y entonces se le vuelve a pedir la contraseña.

Este es el comportamiento normal, y en la mayoría de los casos, este funcionamiento es suficiente. WordPress no ofrece ninguna manera fácil de desconectarnos cuando hemos accedido a una página o entrada protegida. Pero hay veces en que necesitamos que esta sesión dure un tiempo determinado, o bien que el usuario la pueda cerrar manualmente, es decir, poder controlar el tiempo de la sesión.

Vamos a ver las diferentes maneras de conseguir esto:

  1. Borrar manualmente la cookie guardada en el navegador
  2. Acceder al código interno de WordPress y editar la función que define la cookie
  3. Crear una función para ajustar la validez de la contraseña
  4. Crear un botón (un enlace) para que el usuario pueda desconectarse (borrar la cookie) fácilmente a través de un plugin
  5. Otras ideas: páginas privadas

Cómo borrar manualmente la cookie de WordPress guardada en el navegador

Por defecto, las contraseñas de las páginas y entradas quedan almacenadas en una cookie en el navegador durante 10 días. Para que vuelva a pedirla basta eliminar esta cookie (útil por ejemplo, si estamos en un ordenador compartido, o si estamos montando una web y necesitamos ver el formulario de contraseña).

El proceso en Google Chrome sería este:

  1. Entrar en la configuración del navegador
  2. Mostrar opciones avanzadas (abajo del todo)
  3. Privacidad > Configuración del contenido
  4. Todas las cookies y los datos de sitios
  5. Buscar cookies (escribir el nombre del dominio)
  6. Buscar la cookie “wp-postpass…”
  7. Eliminar

El mismo proceso en Firefox:

  1. Editar las opciones
  2. Privacidad
  3. Eliminar cookies de forma individual
  4. Buscar (introducir el nombre del dominio)
  5. Eliminar cookie

Si aun así el navegador sigue recordando la contraseña es porque le dijimos que la guardara al introducirla por primera vez. En este caso habrá que editar la gestión de contraseñas y borrarla.

Editar el código interno de WordPress para cambiar la función que define la cookie (no recomendado)

Cuando la solución a algún problema con WordPress pasa por editar el código interno del sistema, es que no es una buena solución, ya que nos forzará a tomar una de estas dos (malas) decisiones:

  1. No actualizar más el sistema, para no perder los cambios que hemos hecho
  2. Repetir los cambios internos cada vez que actualicemos WordPress

Aun así, como demostración teórica, vamos a ver qué es lo que habría que cambiar:

1. A través de FTP, accedemos al archivo “wp-login.php” (en la raiz de nuestra instalación de WordPress). En versiones anteriores a WP 3.4 había un archivo llamado “wp-pass.php”, pero en las versiones más actuales, este archivo ha desaparecido y la funcionalidad ha pasado a integrarse dentro de “wp-login.php”

2. Aproximadamente en la linea 395 (buscar “wp-postpass_”, si es más fácil) encontramos la función “setcookie“, encargada de definir los valores de la sesión:

// 10 days
setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( stripslashes( $_POST['post_password'] ) ), time() + 10 * DAY_IN_SECONDS, COOKIEPATH );

El tiempo definido por defecto es 10 multiplicado por los segundos que tiene un día (o sea 24 horas * 60 * 60 = 86.400 segundos). Por tanto, la duración inicial de la cookie será de 860.400 segundos (10 * 86.400).

Para hacer que esta cookie expire antes tenemos que sustituir “10 * DAY_IN_SECONDS” por la cantidad de segundos que queramos: 86400 (1 día), 3600 (1 hora), 1800 (30 minutos), 900 (15 minutos), 300 (5 minutos), etc:

// 86400 = 1 día (1440*60)
// 3600 = 1 hora (60*60)
// 1800 = 30 minutos (30*60)
// 900 = 15 minutos (15*60)
// 300 = 5 minutos (5*60)
setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( stripslashes( $_POST['post_password'] ) ), time() + 1800, COOKIEPATH );

Crear una función para ajustar la validez de la contraseña

Como hemos dicho, la solución anterior no es recomendable porque implica editar el código interno de WordPress. Como alternativa, podemos crear una función en nuestro tema (en functions.php, por ejemplo) que se encargue de forzar un periodo de vida más breve para la cookie encargada de guardar la contraseña.

En este ejemplo, le damos a “setcookie” un valor de 0 (cero) que forzará a la cookie a expirar con la sesión del usuario, es decir, hasta que cierre la página o el navegador:

function dn_expire_psw_session() {
	if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) ) {
		setcookie('wp-postpass_' . COOKIEHASH, '', 0, COOKIEPATH);
	}
}
add_action( 'wp', 'dn_expire_psw_session' );

Crear un botón para cerrar la sesión (borrar la cookie) fácilmente a través de un plugin

Otra solución sería poder añadir un botón para que el usuario se pueda desconectar fácilmente, y que ese botón se encargue de eliminar automáticamente la cookie del navegador, sin tener que hacerlo nosotros a mano.

Lo más fácil en este caso será utilizar alguno de los plugins que ya existen:

Plugin: Protected Posts Logout Button

Este plugin añade automáticamente un botón para desconectar (un input type=”button”, concretamente) en las páginas o entradas protegidas con contraseña. En este caso, lo que hace esta extensión, según su autor, es definir la cookie para que expire 10 días hacia atrás.

Una vez instalado y activado, tendremos que ir a Ajustes > Protected Post Logout y configurarlo según nuestras preferencias. Desde aquí podremos:

  • Decidir si queremos que aparezca un aviso cuando el usuario se desconecta
  • Definir el texto y la clase HTML del enlace
  • Definir el comportamiento: automático o manual. Si elegimos el manual, podremos insertar el botón tanto con un shortcode como con una función para insertar en las plantillas

Como punto negativo, este plugin no ofrece la posibilidad de definir el texto del botón desde el panel de ajustes. Por defecto saldrá siempre la palabra “Logout”, a no ser que accedamos al código interno del plugin y lo cambiemos (en la linea 26: value=”logout”).

Más información y descarga del plugin:
http://wordpress.org/plugins/protected-posts-logout-button/

Plugin: Logout password protected posts

Aunque este plugin, según su autor, ha dejado de mantenerse, sigue funcionando perfectamente en WordPress 3.5.2. Lo que hace es añadir un botón en forma de enlace en todas las páginas y entradas protegidas por contraseña, para que el usuario pueda desconectarse al terminar la sesión. Podemos añadir el botón donde queramos, en cualquier plantilla: page.php, single.php, content-page.php, etc.

Una vez instalado el plugin, solo tendremos que copiar esta etiqueta de plantilla (template tag) y pegarlo donde queramos que aparezca el enlace para cerrar la sesión:

<?php do_action('posts_logout_link','Cerrar sesión','clase'); ?>

Aquí podemos definir dos cosas: el texto que verán los usuarios (por ejemplo: “Cerrar sesión”, “Salir”, “Desconectar”, “Eliminar cookie”, “Logout”, etc.) y la clase HTML que queramos dar a este enlace (opcional), para poder dar estilo con CSS a este botón. Si no necesitamos especificar una clase, el código quedaría así:

<?php do_action('posts_logout_link','Cerrar sesión'); ?>

Página del plugin: WordPress Plugin: Logout Password Protected Posts
Descargar plugin: http://downloads.wordpress.org/plugin/logout-password-protected-posts.zip

Otras ideas: páginas privadas

En algunos casos, puede que la función de proteger páginas con contraseña no sea la más adecuada. WordPress permite otra manera de cerrar el acceso a nuestro contenido a través de páginas y entradas privadas. Estas páginas no son visibles para las visitas que no están registradas en el sistema, con lo que nuestro contenido queda más protegido por estar menos a la vista. Incluso aunque alguién adivinara la URL de la página privada, aun así no tendría acceso.

Por defecto, el contenido privado en WordPress solo es visible para administradores y editores. Cualquier rol con menos privilegios no tendrá posibilidad de acceder (y mucho menos editar) el contenido.

Para cambiar la visibilidad de una página solo tenemos que cambiar “Público” por “Privada” (justo encima del botón de Publicar o Actualizar).

Más información:

Comentarios

  1. Dídac

    Yo ya borré la cookie, pero cuando pongo la contraseña y luego cierro la pagina y la vuelvo abrir sigo viendo la información. ¿Que hago?

  2. Daniel

    Es normal, la cookie se vuelve a crear cada vez que entras en la página con la contraseña, o sea que aunque la borres manualmente, volverá a estar ahí.

  3. Ana

    Hola: Tengo instalado WP-Members en mi sitio web para restingir el acceso a algunas páginas. Pero quiero saber si existe alguna posibilidad de limitar aún más el acceso a un solo ingreso por contraseña. Es decir, WP genera una contraseña y quisiera evitar que se pueda compartir y que varios/as ingresen con los mismos datos desde diferentes IP.
    Muchas gracias por tu ayuda!

  4. Daniel

    Hola Ana.
    Para accesos individuales (no contraseñas generales) lo suyo sería hacer que cada usuario se registrara con su propio nombre y contraseña, y después con el plugin “Members” configurar los accesos.

    Pero de todas formas, si se trata de evitar que se comparta la información de acceso, nada impide tampoco que lo hagan con este sistema.
    Podrías limitar los accesos por IP, pero ten en cuenta que la mayoría de la gente no tiene direcciones IP estáticas, sinó dinámicas.

  5. Adrian

    Buenas noches, me ha desaparecido el “insertar botón” y ha desaparecido de todas las páginas de mi web, produciendo un auténtico desastre.
    Sabe qué puede haber pasado o cómo solucionarlo?. La web es certisev.es. Muchas gracias

  6. Daniel

    Hola Adrian.
    Lo de “insertar botón” debe ser algo propio del tema que utilizas. Que yo sepa, WordPress no incluye esa función. Lo mejor es que preguntes a los creadores de tu plantilla para que te expliquen cómo solucionarlo.

  7. Leonel Morales

    Funciona barbaro!
    Gracias

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)