Foros del Web » Programando para Internet » PHP »

Sesiones y robots

Estas en el tema de Sesiones y robots en el foro de PHP en Foros del Web. Hola: Mi pregunta es si cuando un robot visita una página, es posible que sin estar programado se ejecute un código diferente a cuando la ...
  #1 (permalink)  
Antiguo 27/12/2005, 02:26
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Sesiones y robots

Hola:

Mi pregunta es si cuando un robot visita una página, es posible que sin estar programado se ejecute un código diferente a cuando la página es visitada con un navegador normal.

El caso es que en una página de la web, creo una sesion y un número aleatorio de usuario de esta forma:
Código PHP:
session_start();
if (!isset(
$nusuario)) {
   
$nusuario=rand(10,1000000);
   
$_SESSION['nusuario']= $nusuario;

Lo que ocurre es que si se trata de una visita con navegador, la variable se crea y todo funciona bien (por lo menos en las pruebas en local y en hosting que he hecho). Es decir, se graban en la tabla los datos previstos y están disponibles en la sesion.

Pero creo que si un robot entra en la página, la variable $nusuario no se crea y se graba en la tabla el valor por defecto (cero). Imagino que es así porque en ocasiones aparecen en la tabla registros sin la variable, creados con una diferencia de tiempo muy pequeña y que parecen coincidir con la vista de algún robot a la página (esto lo controlo con un script).

Antes de preguntar al hosting si tienen algún sistema para que no se asocien sesiones a las visitas de robots, he preferido exponer el tema aquí para ver si alguien puede orientarme.

Muchas gracias
  #2 (permalink)  
Antiguo 27/12/2005, 09:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
¿Sabías que al crear una sesión .. ya se está creando un "código" aleatorio que no es más que el mismisimo SID (identificador único de sesión)?
Te hago el comentario por qué NO es necesario generar y volcar en una variable de sesión un dato así .. por qué ya lo tienes si usas la función:

session_id()
www.php.net/session_id

.. o si quieres el SID completo . .usalo como constante que es:
Código PHP:
echo SID// sin comillas, es una constante 
Por otro lado .. una visita de un robot a tus páginas se hace exactamente igual que con cualquier conexión HTTP a una de tus páginas con otro tipo de "cliente" como pueda ser un navegador.

La sesión se creará y continuará usandose si puede propagar el SID .. sea por cookies o por el URL. Un "robot" no gestionará cookies como un navegador .. pero si sigue "links" y bajo PHP propagas el SID en el URL .. llamaras a tu sesión en curso con su SID válido.

En tu código .. el uso que haces de sesiones no es correcto, deberías usar:

Código PHP:
session_start(); 
if (!isset(
$_SESSION['nusuario'])) { 
   
$nusuario=rand(10,1000000); 
   
$_SESSION['nusuario']= $nusuario

Tampoco se vé como sigue el flujo de ese código para ver como y donde exactamente almacentas tu registro con ese "nusuario" .. Pero, podría estar el problema por ahí .. estás asumiendo variables como "globales".

Pero como te he comentado .. simplemente usando:
session_start();
$numuser=session_id();

Ese SID (id de sesión concretamente en ese caso) será igual para toda la sesión si se consigue propagar el SID correctamente. No sé si usas sólo sesiones para este tema o para más cosas .. en tal caso sigue usando tus variables de sesión como de costumbre.

Un saludo,
  #3 (permalink)  
Antiguo 27/12/2005, 12:32
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Gracias por tu respuesta.

He modificado el código sugún tus observaciones y he cambiado el enlace para pasar por GET la variable $nusuario para asegurarme de que pasa por URL a la página de proceso.

De todos modos, hay algo que me desconcierta.

El servidor tiene puesto register_globals on
En este caso, yo creía que siempre que se define una variable de sesion con
Código PHP:
$_SESSION['variable']= $variable
queda disponible para toda la sesion y que puede evitarse la propagación por URL (otra cosa es la seguridad que, según se dice en http://es2.php.net/manual/es/security.globals.php , es bastante pobre).

No se si la variable no se transmitía porque el código estaba mal o porque no es siempre cierto que con register_globals on, una variable de sesion definida esté siempre disponible durante la sesión.

En fin , con la modificación del código y pasando por GET la variable, ya no debería ocurrir lo que he comentado al inicio del post.

Gracias por tus aclaraciones.

Saludos.
  #4 (permalink)  
Antiguo 27/12/2005, 13:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La propuesta que te hice es que basado en la existencia de tal variable de sesión .. le doy valor o no.

El "$nusuario" no sé de donde llegaba a ese script .. supongo que por GET como dices? .. El caso es que como veras, si no se usa $_GET['nusuario'] si es que es una variable externa que llega por GET .. o el equivalente en $_SESSION si fuese una sesión .. o donde sea no se vé nada claro de donde llegan esas variables ni se discrimina el método por la cual las esperas.

El otro tema de que si tu defines una variable de sesión tipo:

session_start();
$_SESSION['variable'] = "valor";

quede disponible en todo script sub-siguiente que necesites usarla dependeará de como se propague el SID (Identificador único de sesión).

En la mayoría de casos .. al comenzar a usar "sesiones" uno no conoce que existe el "SID" ni lo vé por ningún sitio afirmando que las sesiones funcionan simplemente definiendolas como el ejemplo que puse y leyendolas de la misma forma:

session_start();
echo $_SESSION['variable'];

pero .. esto no es así de simple .. la "magia" de todo esto es como PHP propaga el SID y que se está haciendo. Concretamente se hace por dos médios: URL y cookies. Ambos métodos PHP dispone de configuración para "Forzar" a que lo haga automáticamente por alguno de los dos métodos para asegurar esa propagación del SID entre los scripts que componen tu aplicación y se van a mover en la sesión en curso.

De todo esto hay muchos comentarios en el foro de PHP y algo más en las FAQ's del foro. Intenta revisarlos y profundizar más en el concepto del "SID" .. si tienes dudas o consultas pregunta (pero antes intenta leer en php.net sobre el SID: www.php.net/session)

Un saludo,
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 21:58.