Foros del Web » Programando para Internet » PHP »

Comprobar Session y Cookie e insertar su ip

Estas en el tema de Comprobar Session y Cookie e insertar su ip en el foro de PHP en Foros del Web. Hola gente, comento mi problema. Hace tiempo creé un sistema de registro donde se memorizaban varios datos del usuario, a excepción de la ip. Tiempo ...
  #1 (permalink)  
Antiguo 15/01/2009, 05:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 16 años, 1 mes
Puntos: 1
Comprobar Session y Cookie e insertar su ip

Hola gente, comento mi problema.
Hace tiempo creé un sistema de registro donde se memorizaban varios datos del usuario, a excepción de la ip.
Tiempo después, añadí una variable para insertar también su ip en la base de datos.
Problema: tengo algunos usuarios registrados de los que no tengo la ip en las base de datos.
Solución: se me ocurre que cuando hago las comprovaciónes de sesión y cookie, si alguna de las 2 da positivo, buscar en la base de datos en el campo ip y si está vacio, capturar su ip e insertarla.
Puede parecer sencillo a simple vista para algunos, pero yo no se por donde tirar.
Si os sirve de ayuda puedo poner el código que me verifica si el usuario está logeado.
Muuuuchas gracias
  #2 (permalink)  
Antiguo 15/01/2009, 06:28
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 19 años, 2 meses
Puntos: 55
Respuesta: Comprobar Session y Cookie e insertar su ip

la solucion esta bien, ahora recuerda que la ip puede ir variando en cada conexion, asi que si ya tienes el ip del usuario deberias actualizarla o guardar otra mas
saludos
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 15/01/2009, 07:24
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Comprobar Session y Cookie e insertar su ip

Cita:
Iniciado por emiliodeg Ver Mensaje
... deberias actualizarla o guardar otra mas
saludos
Genial , y como puedo hacer eso? te voy a colocar el código que comprueba si el usuario está identificado tanto por Session como por Cookie:

logueado.php

Código PHP:
<?php 
//conecto con la base de datos
$conn mysql_connect("localhost","***","***");
//selecciono la BBDD
mysql_select_db("elnombredemibase",$conn); 

//primero tengo que ver si el usuario está memorizado en una cookie
if (isset($_COOKIE["id_usuario_dw"]) && isset($_COOKIE["marca_aleatoria_usuario_dw"])){
   
//Tengo cookies memorizadas
   //además voy a comprobar que esas variables no estén vacías
   
if ($_COOKIE["id_usuario_dw"]!="" || $_COOKIE["marca_aleatoria_usuario_dw"]!=""){
      
//Voy a ver si corresponden con algún usuario
      
$ssql "select * from mi_db where id_usuario=" $_COOKIE["id_usuario_dw"] . " and cookie='" $_COOKIE["marca_aleatoria_usuario_dw"] . "' and cookie<>''";
      
$rs mysql_query($ssql);
      if (
mysql_num_rows($rs)==1){
      
$usuario_encontrado mysql_fetch_object($rs);
}
}
}
if (isset(
$_COOKIE["id_usuario_dw"]) && isset($_COOKIE["marca_aleatoria_usuario_dw"])) {
          
$msj 'Hola <b> '.$usuario_encontrado->nombre_usuario;
}else{
session_start();
if ( isset ( 
$_SESSION['usuario'] ) ) {
          
$msj 'Hola <b> '.$_SESSION['usuario'].' </b> <a href="login/salir.php"><img src="imagenesweb/x.jpg"/></a>';
}else{
          
$msj 'Hola <b>Invitado</b><DIV ALIGN=right><a href="identificacion.php">Identificarse</a> | <a href="login/registro.php">Registrarse</DIV></a>';
}          
}
echo 
$msj;
?>
Héchame un cable amigo
  #4 (permalink)  
Antiguo 15/01/2009, 12:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Comprobar Session y Cookie e insertar su ip

Bueno, como veo una "activa" participación en el post, voy a tratar de hacer lo que a mi se me ocurriria.
Animaros por lo menos a corregir el script.
Los comentarios en mayúsculas son lo nuevo del script

Código PHP:
<?php 
//conecto con la base de datos
$conn mysql_connect("localhost","***","***");
//selecciono la BBDD
mysql_select_db("elnombredemibase",$conn); 
//defino la variable ip, en este caso la ip del usuario
$ip $ip $REMOTE_ADDR ;

//primero tengo que ver si el usuario está memorizado en una cookie
if (isset($_COOKIE["id_usuario_dw"]) && isset($_COOKIE["marca_aleatoria_usuario_dw"])){
   
//Tengo cookies memorizadas
   //además voy a comprobar que esas variables no estén vacías
   
if ($_COOKIE["id_usuario_dw"]!="" || $_COOKIE["marca_aleatoria_usuario_dw"]!=""){
      
//Voy a ver si corresponden con algún usuario
      
$ssql "select * from mi_db where id_usuario=" $_COOKIE["id_usuario_dw"] . " and cookie='" $_COOKIE["marca_aleatoria_usuario_dw"] . "' and cookie<>''";
      
$rs mysql_query($ssql);
      if (
mysql_num_rows($rs)==1){
      
$usuario_encontrado mysql_fetch_object($rs);
}
}
}
//comenzamos las comprobaciones, primero miramos si tienes memorizados datos en una cookie
if (isset($_COOKIE["id_usuario_dw"]) && isset($_COOKIE["marca_aleatoria_usuario_dw"])) {
          
$msj 'Hola <b> '.$usuario_encontrado->nombre_usuario;
//INTENTO BUSCAR QUE LA IP DE LA PERSONA CON ESAS COOKIES REGISTRADAS COINCIDE CON LA IP MEMORIZADA PARA ESA COOKIE
          
$ssql_1 "select * from mi_db where id_usuario=" $_COOKIE["id_usuario_dw"] . " and cookie='" $_COOKIE["marca_aleatoria_usuario_dw"] . "' and cookie<>'' and ip='$ip'";
          
$rs_1 mysql_query($ssql_1);
//SI DA NEGATIVO EL RESULTADO PASO A INSERTAR SU IP EN EL CAMPO IP DE LA BASE DE DATOS
                
if (mysql_num_rows($rs_1)==0){
                            
$query "INSERT INTO mi_db (ip) VALUES ('$ip')";
                            
$query1 "INSERT INTO tblUsuarios (ip) VALUES ('$ip')";
                            
mysql_query($query) or die(mysql_error());
                            
mysql_query($query1) or die(mysql_error());
                
}
//si no tiene cookie miramos si tiene una session 
}else{
session_start();
if ( isset ( 
$_SESSION['usuario'] ) ) {
          
$msj 'Hola <b> '.$_SESSION['usuario'].' </b> <a href="login/salir.php"><img src="imagenesweb/x.jpg"/></a>';
//INTENTO BUSCAR QUE LA IP DE LA PERSONA CON ESAS COOKIES REGISTRADAS COINCIDE CON LA IP MEMORIZADA PARA ESA SESSION
          
$ssql_2 "select * from mi_db where nombre_usuario=" .$_SESSION['usuario']. " and ip='$ip'";
          
$rs_2 mysql_query($ssql_2);
//SI DA NEGATIVO EL RESULTADO PASO A INSERTAR SU IP EN EL CAMPO IP DE LA BASE DE DATOS
                
if (mysql_num_rows($rs_2)==0){
                            
$query2 "INSERT INTO mi_db (ip) VALUES ('$ip')";
                            
$query3 "INSERT INTO tblUsuarios (ip) VALUES ('$ip')";
                            
mysql_query($query2) or die(mysql_error());
                            
mysql_query($query3) or die(mysql_error());
}
//si no la tiene la invitamos a que se haga login o se registre :)
}else{
          
$msj 'Hola <b>Invitado</b><DIV ALIGN=right><a href="identificacion.php">Identificarse</a> | <a href="login/registro.php">Registrarse</DIV></a>';
}          
}
echo 
$msj;
?>

Última edición por Xematick; 15/01/2009 a las 13:27
  #5 (permalink)  
Antiguo 15/01/2009, 13:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Comprobar Session y Cookie e insertar su ip

Bueno, con ese código me dice
Duplicate entry '' for key 2
Vale ya está claro, me guarda la ip en un campo nuevo, no en el campo de la session o cookie ya existente, como hago eso? alguien me ayuda?
  #6 (permalink)  
Antiguo 15/01/2009, 13:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Comprobar Session y Cookie e insertar su ip

Que estas subiendo el mismo key para un campo, checa que ese campo no tenga ya una llave, existente y para eso es mejor usar llaves con auto_increment.

Saludos.
  #7 (permalink)  
Antiguo 15/01/2009, 13:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Comprobar Session y Cookie e insertar su ip

Me dice que tengo un error de código Sql cuando hago esto:

Código PHP:
                if (mysql_num_rows($rs_1)==0){
                            
$query "INSERT INTO mi_db (ip) VALUES ('$ip') where id_usuario=" $_COOKIE["id_usuario_dw"] ."";
                            
$query1 "INSERT INTO tblUsuarios (ip) VALUES ('$ip') where IDUsuario=" $_COOKIE["id_usuario_dw"] ."";
                            
mysql_query($query) or die(mysql_error());
                            
mysql_query($query1) or die(mysql_error()); 

Y para la session esto otro:

Código PHP:
if (mysql_num_rows($rs_2)==0){
                            
$query2 "INSERT INTO mi_db (ip) VALUES ('$ip' )where nombre_usuario=" .$_SESSION['usuario']."";
                            
$query3 "INSERT INTO tblUsuarios (ip) VALUES ('$ip')where Nick=" .$_SESSION['usuario']."";
                            
mysql_query($query2) or die(mysql_error());
                            
mysql_query($query3) or die(mysql_error()); 
  #8 (permalink)  
Antiguo 15/01/2009, 13:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Comprobar Session y Cookie e insertar su ip

Si nos indicas el error es más facil orientarte.

Saludos
  #9 (permalink)  
Antiguo 15/01/2009, 13:52
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Comprobar Session y Cookie e insertar su ip

Cita:
Iniciado por GatorV Ver Mensaje
Si nos indicas el error es más facil orientarte.

Saludos

Ok, dice así:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where id_usuario=52' at line 1

Está bien hecha esta inserción?

Código PHP:
    $query "INSERT INTO mi_db (ip) VALUES ('$ip') where id_usuario=" $_COOKIE["id_usuario_dw"] .""
  #10 (permalink)  
Antiguo 15/01/2009, 14:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Comprobar Session y Cookie e insertar su ip

No, la sintaxis de INSERT es:

Código sql:
Ver original
  1. INSERT INTO tabla (cols) VALUES (valores)

Si tu quieres actualizar tienes que usar una consulta UPDATE.

Saludos
  #11 (permalink)  
Antiguo 15/01/2009, 14:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 16 años, 1 mes
Puntos: 1
Aaah ok!
Y la sintaxis de update es la misma que la de insert pero cambiendo el insert por update no?
Y para que me seleccione el campo ip de esa cookie sería así?:

Código PHP:
    $query "UPDATE INTO mi_db (ip) VALUES ('$ip') where id_usuario=" $_COOKIE["id_usuario_dw"] .""
He hurgado un poco en el buscador. Tal vez estaría correcto de esta forma?

Código PHP:
$query="update mi_db set ip='$ip' WHERE id_usuario=" $_COOKIE["id_usuario_dw"] ." " 
Esto estaría bien? Eso me actualizaria la ip del usuario que tiene ese id en la base de datos y en la cookie ?

Resuelto :)

Última edición por GatorV; 15/01/2009 a las 15:37
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 14:12.