Control monousuario en opencart.
Este script se hizo inicialmente para una página de videos, en la que no querían que hubiese más de una sesión abierta por usuario, ya que querían controlar que cada usuario solo pudiese ver los videos en un sitio al mismo tiempo.
Con este script lograremos que cuando un usuario tenga abierta una sesión y abra otra en otra sitio se cierre la sesión que tenía abierta anteriormente.
Primero creamos la tabla control_session con la que queremos controlar las sesiones que se abren en nuestra página web.
CREATE TABLE control_session( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR(300), sessionid VARCHAR(300)); |
En las páginas dónde puedan hacer login los usuarios recuperaremos estas variables (por lo general será la página Account).
//insertamos en la tabla el id del customer y la sesión $session1= $this->session->getId(); $name = $this->customer->getId(); $sql12="insert into control_session (sessionid,name ) values ('$session1','$name')"; $this->db->query($sql12); $pruebastock1 = mysql_query($sql12); // recuperamos la última sesión abierta. $sql1="SELECT max(id), sessionid from control_session WHERE name='prueba'"; $lanzaquery = mysql_query($sql1); $recuperaid = mysql_fetch_array($lanzaquery); $sessionid2 = $recuperaid['sessionid']; echo "**********"; echo $sessionid2; echo "**********"; |
Ahora insertaremos este código en el footer o en algun sitio que se cargue siempre en nuestra web o en el producto si queremos que se controle la sesión cuando el cliente llegue al producto. Así cada vez que nos movamos a una página dentro de Opencart que ejecute este código comprobaremos que la sesión abierta en ese navegador es la última, sino es se cerrará esa sesión.
Con lo que finalmente lograremos que haya una solamente una sesión abierta por cliente que esté subscrito.
//footer
//comparamos el customer y la session $session1= $this->session->getId(); $name = $this->customer->getId(); echo "select"; $sql12="SELECT max(id) id from control_session WHERE name='$name'" ; $result = mysql_query($sql12); $lanzaquery2 = mysql_fetch_array($result); $result1 = $lanzaquery2['id']; $sql123="SELECT max(id) id from control_session WHERE name='$name' and sessionid='$session1'"; $result = mysql_query($sql123); $lanzaquery3 = mysql_fetch_array($result); $result2 = $lanzaquery3['id']; echo '*'.$this->document->getTitle().'*'; echo "-----"; if ($result1==$result2){ echo 'Go!'; }else{ if ('My Account'==$this->document->getTitle()){ echo "Fuera"; }else { session_destroy(); header("Refresh:0; url=index.php?route=common/home"); } } |
Finalmente, le reenviaremos a la página principal en el caso de que no coincida la última sesión con la sesión que el usuario tenga abierta en su navegador.