Evitar que un usuario tenga la sesión iniciada en varios dispositivos en WordPress

Si tenéis uno de los cada vez más populares sitios de membresía con suscripción, que por cierto podéis montar usando nuestro plugin para RedSys y WooCommerce compatible con Woo Subscriptions; es posible que queráis hacer como hacen los servicios como Netflix o Prime Video y limitar el número de sesiones activas con una misma cuenta.

Así evitáis que una persona pague y comparta la cuenta con amigos, familiares o conocidos y aunque no podéis evitar llegar de forma sencilla al nivel de Netflix y limitar el uso de la cuenta por zonas geográficas, que eso sería otro problema, sí que podéis limitar de forma sencilla que varios usuarios a la vez estén conectados con la misma cuenta.

Os traigo un pequeño código para que incluyáis en vuestro plugin de funciones o en vuestro tema hijo. Por favor no uséis los plugins que añaden código PHP a la base de datos porque:

  • son inseguros al guardar código en una parte vulnerable de por sí como la base de datos
  • hacen que la web pierda rendimiento porque para ejecutar partes del código hay que leer la base de datos, que es mucho más lenta que los ficheros
  • cualquier profesional que os dé soporte no mirará ahí y al estar fuera del ámbito estándar será más difícil de depurar si tenéis un problema

Así que nada, aquí os lo dejo, poniendo abajo una pequeña descripción de qué hace el mismo.

add_action( 'init', function(){

if( current_user_can( 'manage_options' ) )

  return;

$sessions = WP_Session_Tokens::get_instance( get_current_user_id() );

$all_sessions = $sessions->get_all();

if ( count( $all_sessions ) > 1 ) {

  $sessions->destroy_others( wp_get_session_token() );

}

},PHP_INT_MAX );

¿Cómo funciona este código?

  • al final del hook init que indica que todo ya está cargado
  • comprobamos primero que el usuario no pueda manejar opciones, esa capacidad es propia solo de los administradores, si queréis ajustar a otros roles es cuestión que cambiéis esa parte de la lógica
  • obtenemos todas las sesiones del usuario actual
  • si hay más de una las destruimos, de forma que a todas las sesiones les saldrá el típico mensaje de inicio de sesión en WordPress aunque estuvieran conectadas

Sencillo y breve. Hay plugins mucho más pesados porque hacen otras cosas, pero claro, este código es liviano y si no os interesan más funcionalidades que esta, esta es la forma más eficiente de resolver este problema.

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

0

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito