Foros del Web » Programando para Internet » PHP »

Ahorrar recursos. ¿Sesiones o URL ?

Estas en el tema de Ahorrar recursos. ¿Sesiones o URL ? en el foro de PHP en Foros del Web. Hola. Mi pregunta es doble: 1.- Con vistas a optimizar los recursos del servidor, ¿es mejor usar sesiones o pasar la variables por URL?. ¿Puede ...
  #1 (permalink)  
Antiguo 11/01/2005, 07:06
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Ahorrar recursos. ¿Sesiones o URL ?

Hola.

Mi pregunta es doble:

1.- Con vistas a optimizar los recursos del servidor, ¿es mejor usar sesiones o pasar la variables por URL?.
¿Puede conseguirse la misma seguridad con paso por URL que con sesiones?

2.- En una página recojo cuatro variables para mostralas y luego me dirijo a otra página que necesita diez variables más para mostrarse ( en esta segunda página consulto otra vez la BD).
Puedo hacer dos cosas:
<a href=\"pagina2.php?var1=$var1&var2=$ivar2&var3=$va r3&var4=$var4\">VER PAGINA 2</a>
o enviar sólo una variable, var1, por ejemplo y recoger las otras en la segunda consulta a la tabla.
A nivel de recursos y de seguridad, ¿hay diferencias?.

Para terminar, en este caso podría recoger todas la variables en la primera página y abrir una sesión o pasarlas por URL. ¿Es aconsejable recoger todas las variables al principio de la página para usarlas donde convenga, o es mejor recogerlas cuando se necesitan?.

Ya imagino que mis preguntas no tienen un tipo de respuesta SI o NO, ya que todo es relativo, pero os agradecería una opinión general.

Gracias a todos.

Última edición por javifo; 11/01/2005 a las 07:09
  #2 (permalink)  
Antiguo 11/01/2005, 07:27
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

1.- Por seguridad, siempre sesion. Si usas URL es el navegador el que manda esos datos, y pasan por todos los puntos intermedios (proxy, routers, ...). Es facil "pinchar" la linea y modificar los datos de la URL (pregunta a los afiliados cd clickbank y como existen spywares para IE que sustituyen los id de afiliado del webmaster por los del creador del spyware).

Por recursos, por URL consumes "mas" transferencia (unos bytes por peticion), por sesion consumes "mas" disco duro (unos bytes por sesion activa). Si tienes 100 sesiones activas simultaneas, todas con una media de 1kb de datos, estas ocupando 100kb de disco duro.

2.- Depende del caso, pero por mas seguro seria solo pasar un valor y volver a consultar los datos. Solo planteate que supondria que un "crio" malintencionado se pondria a jugar con los valores que pasas por url (¿nunca has probado a poner en la barra de direcciones directamente otros valores?). Puede producir un fallo de la pagina despreciable (simplemente, da error esa pagina, pero como nadie va a usar esa URL modificada, no importa) o desvelar detalles internos de tu aplicacion que puedan ser usados en un ataque mas serio.

¿REcursos? Bueno, si ya tenias que hacer una consulta a BD, el "gasto" de la conexion a la BD ya lo tenias que hacer.
Cita:
¿Es aconsejable recoger todas las variables al principio de la página para usarlas donde convenga, o es mejor recogerlas cuando se necesitan?.
Supongo que te refieres al comienzo del sitio (o de la navegacion de la seccion). Bueno, yo soy de la opinion de leer los datos en el punto mas cercano a su uso, sobre todo si es de base de datos, y son datos compartidos por varios usuarios simultaneamente. Por ejemplo, imaginate que lees de la BD el valor 5, lo llevas en una sesion durante 5 paginas, muestras ese 5, pero el valor actual en ese momento de mostrarlo el -3. Ese es el problema de desincronizacion, muestras datos antiguos. Por supuesto, hay casos donde eso da lo mismo (por eso la gente usa caches en sus aplicaciones), y esa desincronizacion es despreciable.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 11/01/2005, 08:24
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Gracias. Es lo lógico.

Muchas gracias, Josemi.

Por lo que sé de PHP y MySql, mis ideas coinciden con las tuyas.

El planteamiento de la Web tiene dos partes.

Una es de consulta abierta a todos los usuarios. Aquí, creo que es mejor no usar sesiones. He probado usarlas y, aunque funciona bien, hay que tener mucho cuidado con el "arrastre" y esto complica el código y hace lenta la web. Como sabes, en las pruebas en local jamás puedes reproducir todas la posibles situaciones reales y lo más probable es que en algún momento se te pase el destruir una variable o indicar que la recoja por POST o por GET.

Lo que más me hacía dudar es que hay muchas webs que pasan más de una (o hasta diez o más) variables por URL. Con tu consejo, sólo pasaré una.
Será similar a lo que se hace en este foro (creo).

En la otra parte en que los registrados pueden introducior datos, modificarlos, etc. en las tablas, será con sesiones. Lo cierto es que ya está hecha en local y no da problemas.

Y siguiendo tu consejo, recogeré las variables cuando las deba usar.

Además, he visto una frase tuya en el Foro. Dices algo así: "Una tabla, una consulta". Esto me hace pensar que no es aconsejable hacer una consulta a dos tablas relacionadas. Es así, ¿verdad?.

Para terminar, si no te es un problema quisiera saber si realmente hacer
$var=$_GET['var']; da la completa seguridad de que la variable viene de la URL.

Gracias de nuevo por tu ayuda.
Cordiales saludos.
  #4 (permalink)  
Antiguo 11/01/2005, 09:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Además, he visto una frase tuya en el Foro. Dices algo así: "Una tabla, una consulta". Esto me hace pensar que no es aconsejable hacer una consulta a dos tablas relacionadas. Es así, ¿verdad?.
mm bueno la frase fuera de contexto puede dar a várias interpretaciones. Por mi parte te comento que una consulta relacional a X tablas usando los campos "clave foránea" .. indexados y optimizados puede ser muchooooo mas rápido y optimo (ademas de reducir considerablemente el código "PHP") que algo hecho a base de consultas SQL simples (a una tabla) para luego "anidar" los resultados de otra consulta "simple" a otra tabla condicionada (y relacionada vía PHP) por los resultados de la anterior ..

Cita:
$var=$_GET['var']; da la completa seguridad de que la variable viene de la URL.
Si usas register_globas a OFF realmente te aseguras que en $_GET viajen sólo las variables del método indicado. Por ende si "var" no está definido en "GET" tu $var tendrá de valor "0" o "null" (pero quedará definida a efectos de usar un isset(), en ese caso tendrías que usar un empty())

Un saludo,
  #5 (permalink)  
Antiguo 11/01/2005, 09:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
Además, he visto una frase tuya en el Foro. Dices algo así: "Una tabla, una consulta". Esto me hace pensar que no es aconsejable hacer una consulta a dos tablas relacionadas. Es así, ¿verdad?.
Falla el contexto, si no me equivoco es en el mensaje de eliminar 2 registros en 2 tablas, en ese caso tienes que eliminar de cada tabla por separado (o al menos con mysql 3.23, con otras bd avanzadas puedes usar eliminacion en cadena, stored procedures y demas inventos).

Realizar una consulta a dos tablas (un join) puede ser mejor que 2 consultas (cada tabla por separado). MySQL tiene unos "comandos" que te permiten ver el rendimiento de cada consulta, mas info en http://dev.mysql.com/doc/mysql/en/My...imization.html. Una consulta "simple" mal hecha puede consumir mas que una "compleja" bien hecha.

Solo un consejo sobre optimizacion: primero haz que funcione bien, y despues haz que funcione optimo (y sin consumir recursos). Para pasar del "bien" al "optimo" primero tienes que analizar el rendimiento y los cuellos de botella. Solo molestate en optimizar lo que realmente va a mejorar el rendimiento. Ganar un segundo en una operacion que se realiza mil veces es mejor que ganar medio minuto en una operacion que se realiza 10 veces. El codigo optimizado es mas dificil de mantener que el no-optimizado.
Cita:
Para terminar, si no te es un problema quisiera saber si realmente hacer $var=$_GET['var']; da la completa seguridad de que la variable viene de la URL.
Bueno, creo que si (o al menos asi trabajo yo). Y eso quiere decir que el contenido de $var no es de fiar

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 11/01/2005, 10:13
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Gracias a ambos.

Todo aclarado.

Cordiales saludos.
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 05:13.