Foros del Web » Programando para Internet » PHP »

¿Que piensa de estas dos opciones?

Estas en el tema de ¿Que piensa de estas dos opciones? en el foro de PHP en Foros del Web. Hola, estoy tratando de controlar el número de vistas de un anuncio. He salido con esas dos soluciones. Código PHP: $ip  = ( $_SERVER [ 'REMOTE_ADDR' ...
  #1 (permalink)  
Antiguo 13/03/2010, 16:24
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
¿Que piensa de estas dos opciones?

Hola, estoy tratando de controlar el número de vistas de un anuncio. He salido con esas dos soluciones.

Código PHP:
$ip = ($_SERVER['REMOTE_ADDR'];
setcookie('ctrlViews',$ip,time()+1800); //Cookie expirado en 30 mns
if(isset($_COOKIE['ctrlViews'])){ //no hacemos nada    
}else{ //si no aumentamos la vista a 1
    
$up_count mysql_query("UPDATE url
 SET ccounter = ccounter + 1 WHERE for_ads = '$idAds'" 
) or die(mysql_error());
    } 
Código PHP:
 if (!isset($_SESSION['ctrlViews'])) { //sino existe tal session, aumentamos
$up_count mysql_query("UPDATE url 
SET ccounter = ccounter + 1 WHERE for_ads = '$idAds'" 
) or die(mysql_error());
    
$_SESSION['ctrlViews'] = time();
} else if (
time() - $_SESSION['ctrlViews'] > 1800) { //si es mayor a 30mns
 
    
unset($_SESSION['ctrlViews']); // eliminamos la session para poder aumentar

Según ustedes, cual es la meyor y porque?
  #2 (permalink)  
Antiguo 13/03/2010, 16:37
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 10 años, 7 meses
Puntos: 19
Respuesta: ¿Que piensa de estas dos opciones?

Si el usuario no tiene las cookies activadas no funciona, pero dado que se usan más las cookies k las sesiones (por muchos motivos) usaría las cookies.

Las sesiones se pierden si no se reactivan, lo cual es un coñazo (las sesiones se mandan por headers, que son unas instrucciones que se mandan al principio del archivo, por tanto puedes mandarlas de vuelta a la siguiente vez que se cargue la página, pero se pierden enseguida). Las cookies caducan cuando las dices k caduquen.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #3 (permalink)  
Antiguo 13/03/2010, 16:47
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por AnesGy Ver Mensaje
Si el usuario no tiene las cookies activadas no funciona, pero dado que se usan más las cookies k las sesiones (por muchos motivos) usaría las cookies.

Las sesiones se pierden si no se reactivan, lo cual es un coñazo (las sesiones se mandan por headers, que son unas instrucciones que se mandan al principio del archivo, por tanto puedes mandarlas de vuelta a la siguiente vez que se cargue la página, pero se pierden enseguida). Las cookies caducan cuando las dices k caduquen.
Gracias por responder, tambien me preocupó si el usuario no acepta las cookies.
Pero es obligatorio encriptar la cookie?
  #4 (permalink)  
Antiguo 13/03/2010, 16:59
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 10 años, 7 meses
Puntos: 19
Respuesta: ¿Que piensa de estas dos opciones?

No es obligatorio, pero yo le pondría una base64 o algo, sólo para que no sea tan obvio de leer.

De todas maneras las cookies suelen estar activadas en todos los ordenadores, excepto el de algunas personas que creen que comprometen su seguridad (si supieran la cantidad de información que envían cada vez que intentan entrar en una página XD), pero no en los móviles. Mira a ver si los móviles son un punto de interés en tu estudio.


He mirado un poco mejor tu código y no puedes usar sesiones por que caducan al cambiar de página. Y luego tienes que especificar más como quieres comprobarlo, por que quizás te convenga comprobar si son nuevos por ip en vez de por cookies. Todo el mundo manda una ip, aunque algunas personas la tienen encriptada.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #5 (permalink)  
Antiguo 13/03/2010, 17:24
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por AnesGy Ver Mensaje
No es obligatorio, pero yo le pondría una base64 o algo, sólo para que no sea tan obvio de leer.

De todas maneras las cookies suelen estar activadas en todos los ordenadores, excepto el de algunas personas que creen que comprometen su seguridad (si supieran la cantidad de información que envían cada vez que intentan entrar en una página XD), pero no en los móviles. Mira a ver si los móviles son un punto de interés en tu estudio.


He mirado un poco mejor tu código y no puedes usar sesiones por que caducan al cambiar de página. Y luego tienes que especificar más como quieres comprobarlo, por que quizás te convenga comprobar si son nuevos por ip en vez de por cookies. Todo el mundo manda una ip, aunque algunas personas la tienen encriptada.
Gracias otra vez, si voy a codificar una version para dispositivos móviles.
Yo quería realmente es restingir el usuario por un tiempo definido. osea si ese último refresca la página, en ese intervalo de tiempo, no contabilizamos el conteo.

Pero me quedo bloqueado, por la lógica. Si tienes algo meyor, será bienvenido
  #6 (permalink)  
Antiguo 13/03/2010, 19:19
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 11 años, 4 meses
Puntos: 1532
Respuesta: ¿Que piensa de estas dos opciones?

las sesiones usan una cookie, así que da lo mismo, aunque claro, el modulo session puede trabajar sin cookies con enable_trans_sid pero eso implica pasar el ID de la sesión por GET, así que no es un método viable para un contador
  #7 (permalink)  
Antiguo 13/03/2010, 20:22
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por maycolalvarez Ver Mensaje
las sesiones usan una cookie, así que da lo mismo, aunque claro, el modulo session puede trabajar sin cookies con enable_trans_sid pero eso implica pasar el ID de la sesión por GET, así que no es un método viable para un contador
Como podria mejorar el contador?
  #8 (permalink)  
Antiguo 14/03/2010, 03:25
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 9 años, 9 meses
Puntos: 0
De acuerdo Respuesta: ¿Que piensa de estas dos opciones?

Bueno como lo que pides es una comparación, antes que nada déjame decirte que la opción 1, tiene un error de lógica. Pues primero creas la cookie y luego preguntas si está 'set/ activada’ que no haga nada, lo cual siempre será verdadero y jamás entrará a tu else que es donde aumentas el contador.

Y la segunda opción que presentas tiene dos (2) deficiencias.
Numero 1:
Cada vez que el usuario cierre el navegador y vuelva a entrar el contador aumentará, dado que la variable de sesión se pierde.
Numero 2:
Aunque ya hayan pasado los 1800 segundos, se requiere de dos (2) refresh para que el contador aumente, dado que en el primero entrará al else y eliminara la variable de sesión habría que recargar nuevamente para que entre al if.

Nota:
Para eliminar la variable de sesión prefiero hacer $_SESSION['ctrlViews']=false; y para preguntar si está creada basta con poner if ($_SESSION['ctrlViews']).

Tu ejemplo es bastante sencillo y por lo que veo en tu UPDATE no necesitas la ip, si solo necesitas aumentar el contador 1 vez cada 30 mint por maquina basta con hacer esto:
if(!isset($_COOKIE['ctrlViews']))
{
setcookie('ctrlViews',"ok",time()+1800);

$sent="UPDATE url SET ccounter = ccounter + 1 WHERE for_ads = '$idAds'";
mysql_query($sent) or die(mysql_error());
}
OJO por que si la persona elimina la cookie manualmente antes de los 30 mints podra incrementar el contador.
Para una solucion mas segura habria que guardar la ip en la base de datos.

Última edición por GatorV; 15/03/2010 a las 01:37
  #9 (permalink)  
Antiguo 14/03/2010, 12:14
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por yairohn Ver Mensaje
Bueno como lo que pides es una comparación, antes que nada déjame decirte que la opción 1, tiene un error de lógica. Pues primero creas la cookie y luego preguntas si está 'set/ activada’ que no haga nada, lo cual siempre será verdadero y jamás entrará a tu else que es donde aumentas el contador.

Y la segunda opción que presentas tiene dos (2) deficiencias.
Numero 1:
Cada vez que el usuario cierre el navegador y vuelva a entrar el contador aumentará, dado que la variable de sesión se pierde.
Numero 2:
Aunque ya hayan pasado los 1800 segundos, se requiere de dos (2) refresh para que el contador aumente, dado que en el primero entrará al else y eliminara la variable de sesión habría que recargar nuevamente para que entre al if.

Nota:
Para eliminar la variable de sesión prefiero hacer $_SESSION['ctrlViews']=false; y para preguntar si está creada basta con poner if ($_SESSION['ctrlViews']).

Tu ejemplo es bastante sencillo y por lo que veo en tu UPDATE no necesitas la ip, si solo necesitas aumentar el contador 1 vez cada 30 mint por maquina basta con hacer esto:
if(!isset($_COOKIE['ctrlViews']))
{
setcookie('ctrlViews',"ok",time()+1800);

$sent="UPDATE url SET ccounter = ccounter + 1 WHERE for_ads = '$idAds'";
mysql_query($sent) or die(mysql_error());
}
OJO por que si la persona elimina la cookie manualmente antes de los 30 mints podra incrementar el contador.
Para una solucion mas segura habria que guardar la ip en la base de datos.
Hola Yairohn, gracias por tu respuesta

En primer lugar yo pedí una comparación porque pensé que estaban bien, pero a lo largo no hacen casi nada.

Lo de guardar la ip, yo lo tenia en consideración, pero que pasa con las org que funcionan bajo una sola dirección IP?? o los usurios que los tienen encriptados?'

Bueno si tienes algo mejor a mis soluciones, me lo pasa por fa.

Última edición por GatorV; 15/03/2010 a las 01:37
  #10 (permalink)  
Antiguo 14/03/2010, 13:15
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 10 años, 7 meses
Puntos: 19
Respuesta: ¿Que piensa de estas dos opciones?

La mayoría de la gente tiene ip no encriptada por k no es tan común saber encriptarla. He visto algunos organismos públicos que tienen 2 ip, una seguida de otra. La primera es común, y la segunda es la del ordenador. De todas maneras la mayoría de las universidades (que son organismos públicos) tienen ips fijas y separadas para cada ordenador para controlar un poco las actividades de los distintos ordenadores (también a los k las usan les gusta poner su nombre en el HOSTName, lo cual es un poco ridículo XD).

Si estuvieras haciendo un estudio estadístico estas IP de gente que la encripta son como los no-sabe-no-contesta. Ni aportan datos, ni suelen causar daños al estudio.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #11 (permalink)  
Antiguo 14/03/2010, 13:50
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por AnesGy Ver Mensaje
La mayoría de la gente tiene ip no encriptada por k no es tan común saber encriptarla. He visto algunos organismos públicos que tienen 2 ip, una seguida de otra. La primera es común, y la segunda es la del ordenador. De todas maneras la mayoría de las universidades (que son organismos públicos) tienen ips fijas y separadas para cada ordenador para controlar un poco las actividades de los distintos ordenadores (también a los k las usan les gusta poner su nombre en el HOSTName, lo cual es un poco ridículo XD).

Si estuvieras haciendo un estudio estadístico estas IP de gente que la encripta son como los no-sabe-no-contesta. Ni aportan datos, ni suelen causar daños al estudio.
Gracias hermano, yo voy a proseguir esa manera: primera visita: insertamos la ip en la BD. otra visita: verificamos si esa ip esta en la base, si true, ignoramos el conteo, si es false, aumentamos a 1

Otra duda como harías para controlar eso: es posible que el usuario visita desde un cyber cafe por lo tanto es la misma pc con la misma ip, pero otro usuario
  #12 (permalink)  
Antiguo 14/03/2010, 14:49
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 9 años, 9 meses
Puntos: 0
De acuerdo Respuesta: ¿Que piensa de estas dos opciones?

Creo que no tienes muy claro lo que quieres controlar con tu contador, si quieres controlar geograficamente a cada usuario entonces utiliza su direccion ip, la encriptacion es 1 de cada 10 por tanto no es problema.
Si el control es por usuarios (tomando en cuenta el ejemplo del cyber) entonces registralos en la base de datos y solo usuarios registrados se tomarán en cuenta.

Para controlar el tiempo de espera te recomiendo guardes la fecha del servidor como (datetime) cada vez que aumenta el contador en tu base de datos y luego la comparas para saber si ya pasaron los 30 minutos, de lo contrario que no haga nada.

Última edición por GatorV; 15/03/2010 a las 01:37
  #13 (permalink)  
Antiguo 14/03/2010, 14:54
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por yairohn Ver Mensaje
Creo que no tienes muy claro lo que quieres controlar con tu contador, si quieres controlar geograficamente a cada usuario entonces utiliza su direccion ip, la encriptacion es 1 de cada 10 por tanto no es problema.
Si el control es por usuarios (tomando en cuenta el ejemplo del cyber) entonces registralos en la base de datos y solo usuarios registrados se tomarán en cuenta.

Para controlar el tiempo de espera te recomiendo guardes la fecha del servidor como (datetime) cada vez que aumenta el contador en tu base de datos y luego la comparas para saber si ya pasaron los 30 minutos, de lo contrario que no haga nada.
No estoy haciendo un contador geografico, si no controlando cuantas veces un anuncio ha sido visto. Pero si usuario refresca la paagina, pasamos por alto...

Última edición por GatorV; 15/03/2010 a las 01:38
  #14 (permalink)  
Antiguo 14/03/2010, 15:04
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 10 años, 7 meses
Puntos: 19
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Otra duda como harías para controlar eso: es posible que el usuario visita desde un cyber cafe por lo tanto es la misma pc con la misma ip, pero otro usuario
No se cuenta. Hoy en día mucha gente tiene PC en casa e internet. Las posibilidades de que 2 personas entren en tu anuncio a desde el mismo ordenador en un locutorio son mínimas. No tendrías que contabilizar eso. Creo que es más o menos el sistema que usa Google en Adsense (a ellos les compensa ese error, si 2 personas visitan desde el mismo ordenador en un locutorio sólo se cuenta la primera, por tanto pagan la mitad XD). Afortunadamente para los usuarios de Adsense no es mucha la pérdida.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #15 (permalink)  
Antiguo 14/03/2010, 15:14
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por AnesGy Ver Mensaje
No se cuenta. Hoy en día mucha gente tiene PC en casa e internet. Las posibilidades de que 2 personas entren en tu anuncio a desde el mismo ordenador en un locutorio son mínimas. No tendrías que contabilizar eso. Creo que es más o menos el sistema que usa Google en Adsense (a ellos les compensa ese error, si 2 personas visitan desde el mismo ordenador en un locutorio sólo se cuenta la primera, por tanto pagan la mitad XD). Afortunadamente para los usuarios de Adsense no es mucha la pérdida.
LOL gracias
  #16 (permalink)  
Antiguo 14/03/2010, 15:57
 
Fecha de Ingreso: marzo-2010
Mensajes: 8
Antigüedad: 9 años, 9 meses
Puntos: 0
De acuerdo Respuesta: ¿Que piensa de estas dos opciones?

Lo mejor seria llevar un conteo por cada usuario registrado en la pagina, si al final queres el conteo total lo podes hacer con sql. aqui una idea:
<?php
if ($_SESSION['username'])
{
$hora_visita=ultimaVisita($_SESSION['username']);
$hora_actual=mktime(date("h"),date("i"),date("s"), date("n"),date("j"),date("Y"));

if (isset($hora_visita))
{
if ($hora_actual-$hora_visita>=1800)
//El visitante ingreso hace mas de 30 mints, aumenta contador
}else
//Visitante nuevo, se crea un nuevo registro


}

function ultimaVisita($user)
{
$sent="Select hora From visitas where user='$user'";
$st=mysql_query($sent) or die(mysql_error());
$res=mysql_fetch_assoc($st);

return $res['hora'];
}
?>

Última edición por GatorV; 15/03/2010 a las 01:38
  #17 (permalink)  
Antiguo 14/03/2010, 16:05
Avatar de jartaud  
Fecha de Ingreso: octubre-2009
Ubicación: Canal de Panamá
Mensajes: 96
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: ¿Que piensa de estas dos opciones?

Cita:
Iniciado por yairohn Ver Mensaje
Lo mejor seria llevar un conteo por cada usuario registrado en la pagina, si al final queres el conteo total lo podes hacer con sql. aqui una idea:
<?php
if ($_SESSION['username'])
{
$hora_visita=ultimaVisita($_SESSION['username']);
$hora_actual=mktime(date("h"),date("i"),date("s"), date("n"),date("j"),date("Y"));

if (isset($hora_visita))
{
if ($hora_actual-$hora_visita>=1800)
//El visitante ingreso hace mas de 30 mints, aumenta contador
}else
//Visitante nuevo, se crea un nuevo registro


}

function ultimaVisita($user)
{
$sent="Select hora From visitas where user='$user'";
$st=mysql_query($sent) or die(mysql_error());
$res=mysql_fetch_assoc($st);

return $res['hora'];
}
?>
Gracias otra vez, yo lo que estoy tratando de llevar a cabo, es contabilizar los hits en los anuncios.

Por ejemplo:

Enlace: Vendo Hummer 2005, buen estado
cuando un usuario cliquea en ese enlace, ese último lo va a llevar a los detalles del anuncio (contacto, precio, número de visitas...).

Ahora si es su primera visita, aumentamos el conteo a 1, regsitramos la IP...

Última edición por GatorV; 15/03/2010 a las 01:38

Etiquetas: dos, opciones
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 07:11.