Foros del Web » Programando para Internet » PHP »

Aporte: Permitir solo 1 instancia de usuario

Estas en el tema de Aporte: Permitir solo 1 instancia de usuario en el foro de PHP en Foros del Web. Bueno. Mis saludos a la gente del foro que tantas veces me han ayudado. Se me ha ocurrido una idea para permitir solo una instancia ...
  #1 (permalink)  
Antiguo 07/02/2006, 12:44
 
Fecha de Ingreso: octubre-2005
Mensajes: 95
Antigüedad: 12 años, 1 mes
Puntos: 1
Aporte: Permitir solo 1 instancia de usuario

Bueno. Mis saludos a la gente del foro que tantas veces me han ayudado.
Se me ha ocurrido una idea para permitir solo una instancia de usuario en un sistema web. Obviamente tiene una falencia, pero para las personas que desarrollamos sistemas de gestión que solo se usen en LAN no hay problemas y funciona perfectamente.
La idea:

La idea es sobre la estructura básica de una tabla de usuarios: usu_cod, usu_nom, usu_pass, generar otro campo con la finalidad de almacenar temporalmente una dirección ip.
El enfoque consiste en guardar siempre la ip en el momento de validar la autentificación con la finalidad de ir comparándolo en cada página del sistema.

En otras palabras, al intentar autentificar a un usuario se compara el nombre de usuario y la contraseña en la base de datos. Si ambos coinciden entonces se procede a hacer un update del campo de la ip de esta forma:
Código PHP:
<?php
mysql_query
("update usuarios set usu_ip='".$_SERVER['REMOTE_ADDR']."'",$conexion)
?>
De ésta forma quedará guardada la última ip con que fué logeado el usuario.
Al ir pasando de página en página del sistema, se debe comparar nuevamente la ip del momento usando la misma funcion $_SERVER['REMOTE_ADDR'] con la ip que tenemos guardada en el campo usu_ip correpondiente al usuario de la sesion. Si esta coincide damos acceso y seguimos cargando la página, si no simplemente cerramos la sesion y nos volvemos a la página de inicio.

La forma que se genera la unica instancia es parecida a lo que sucede con el msn, cuando estamos conectados y alguien se conecta desde otro lugar con nuestro usuario y contraseña, se desconecta.

Si un usuario del sistema se logea con el mismo noombre de usuario y contraseña en otro equipo, dejará guardada en la tabla su ip, y cuando nosotros tratemos de avanzar o tretroceder una página no podremos hacerlo por que nuestra ip no coincidirá con la que tenemos guardada. En este caso podemos avisar al usuario que seguramente alguien se ha logeado desde otro pc con su usuario y contraseña.

INCONVENIENTES: Esto solo funciona con usuarios que se conecten a un sistema remoto y que tengan coexión directa a internet y no mediante un router o proxy, ya que si 2 usuarios de una red que ocupa proxy tendran la misma ip, y podrá haber más de una instancia.

Asi que de momento esta idea solo funciona para sistemas que se implementen bajo la estructura de una LAN.

Si alguien puede adaptar la idea para hacerla funcionar a pesar del problema de los routers y los proxys, porfavor haga comentarios....

espero que la idea les ayude y les sirva...a mi me ha servido...

Muchas gracias...
  #2 (permalink)  
Antiguo 07/02/2006, 13:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ante todo gracias por el aporte.

Sobre la funcionalidad del sistema basado por IP (o host si hablamos de una intranet para localizar "quien está" intentando hacer "login" desde otro PC de esa LAN), yo no desconectaría al 1er usuario que hizo login .. desconectaría al que pretende hacer el nuevo login.

Cuando se trabaja así .. el problema sería si usas un "flag" para determinar "el usuario hizo login" es cuando el usuario no sale por tus "logout" (sistemas donde cambies el estado de ese "flag" (bandera)). En esos casos intervienen el tiempo de expiración que determinemos como que el usuario ya no tiene actividad en el sistema desde la última vez que lo hizo .. En resumen: en lugar de guardar la IP . guardar una fecha y actualizarla a cada movimiento de un script que se pida.

Bueno .. esto sería otro concepto diferente al que propones .. pero también se puede usar con el mismo fin .. o para saber cuanto tiempo está el usuario en el sistema .. etc.

Un saludo,
  #3 (permalink)  
Antiguo 07/02/2006, 13:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Si alguien puede adaptar la idea para hacerla funcionar a pesar del problema de los routers y los proxys, porfavor haga comentarios....
Código PHP:
<?
function getip() {
   if (
getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
   
$ip getenv("HTTP_CLIENT_IP");

   else if (
getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
   
$ip getenv("HTTP_X_FORWARDED_FOR");

   else if (
getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
   
$ip getenv("REMOTE_ADDR");

   else if (isset(
$_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
   
$ip $_SERVER['REMOTE_ADDR'];

   else
   
$ip "unknown";

   return(
$ip);
}

Puedes usar esta función .. pero no te asegura en todos los casos que te devuelva la IP que tienes detras de una conexión por un proxy o demás filtros de una red a nivel de enrrutadores, firewalls .. etc.

Un saludo,
  #4 (permalink)  
Antiguo 07/02/2006, 13:28
 
Fecha de Ingreso: octubre-2005
Mensajes: 95
Antigüedad: 12 años, 1 mes
Puntos: 1
bueno....si lo piensas no hay forma de desconectar al que inicia sesion con ip registrada....solo que si pueda ingresar y que el otro no pueda acceder a las páginas. De todas formas para los usuarios de una >> LAN << es útil saber si alguien ha tomado su sesion en vez de que no sepa nada y puedan modificar o eliminar datos con su cuenta sin estar al tanto, a demás como esto es un tema de seguridad, sabiendo la ip sabes quien pudo ser.
De todas formas ya expliqué que esto lo ideé para sistemas implementados en L A N, no simples páginas webs.

No se que opinan ustedes
saludos
  #5 (permalink)  
Antiguo 07/02/2006, 13:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok ..

Creí entender que desconectabas al primer usuario ..

Un saludo,
  #6 (permalink)  
Antiguo 06/06/2006, 15:25
 
Fecha de Ingreso: marzo-2006
Mensajes: 86
Antigüedad: 11 años, 9 meses
Puntos: 0
Control en encuestas

Hola, quiero controlar en una sistema de encuestas que el usuario no vote dos veces seguidas, pense en filtrar por ip. pero el tema, por ej, es cuando usan un ciber para hacerlo.
Encontre esto investigando un poco en la FAQs, me podes explicar mas o menos que hace?, que soluciones puede haber, ya que no es practico que voten solo los registrados.

Gracias

Cita:
Iniciado por Cluster
Código PHP:
<?
function getip() {
   if (
getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
   
$ip getenv("HTTP_CLIENT_IP");

   else if (
getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
   
$ip getenv("HTTP_X_FORWARDED_FOR");

   else if (
getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
   
$ip getenv("REMOTE_ADDR");

   else if (isset(
$_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
   
$ip $_SERVER['REMOTE_ADDR'];

   else
   
$ip "unknown";

   return(
$ip);
}
__________________
:stress: Patri:corazon:
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:25.