Comunidad de diseño web y desarrollo en internet online

Trabajando con sesiones.-

Citar            
MensajeEscrito el 12 Abr 2009 03:38 am
Estoy haciendo un sistema, al cual al entrar el usuario se logea y guardo todos los datos que mas utiliza el sistema en una sesion, para de esta manera ahorar consultas a la db, la pregunta o duda que tengo es cuanto es el tamaño recomendado de las sesiones, por que igual guardo varios datos. El peso aproximadamente de una sesion es de 3kb.-

Cuanto es lo recomendado de guardar, o da lo mismo.-

Gracias...

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 22 Abr 2009 01:43 am
:S aguien que sepa, o me pueda dar una opinion...

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 22 Abr 2009 02:05 am
porq no generar un xml con los principales datos es una solucion mejor no crees mas estable

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 22 Abr 2009 03:16 pm
Hola

No, el tamaño esta bien.... igualmente tenes q revisar q tipo de informacion estas guardando en la sesion... fijate q no sea informacion sencible del usuario o del sistema ya q las sessiones de php son facilmente hakeables...


Por otro lado te comento varias alternativas para lo q necesitas hacer:
1. Sistema de cache:
1.a Podes crear tablas temporales en mysql para guardar la informacion del usuario, estas tablas se eliminan cuando se termina la session.
1.b Podes generar archivos que guardes en cada session del usuario con la info necesaria. En session solo necesitas el identificador del archivo (nombre, ruta, o lo q sea). Incluso podes guardar el nombre del archivo en la bd. Para q cuando la proxima vez q se conecte el usaurio levantar ese archivo y no hacer las consultas (considera q ese archivo tenga x dias de vigencia, pasado ese tiempo se deberia eliminar, esto lo podes hacer por medio de un cron).
2. Optimizar las consultas
2.a Revisra el modelo de datos, que este todo normalizado (o una desnormalizacion controlada y sabiendo q es con fines de optimizacion)
2.b usar el cache de mysql
2.c si son tablas de consulta, q casi no se modifican podes crear vistas
2.d podes usar stores procedures para agilizar las consultas
2.e PRINCIPALMENTE optimiza las consultas que estas generando, no hacer muchos join o subconsultas juntas.
3. Prioriza la cantidad de informacion q guardas en la sesion
3.1 es realmente necesario tener tanta info en session
3.2 cuanta de esa info la va a utilizar el usuario, toda esa info la utiliza en cada pagina q visita? solo en una seccion?
4. Es realmente lento el acceso a cada pag, para tener q no realizar todas esa consultas?
4.a la lentitud se debe al acceso a la BD, a la descarga de archivos?, probaste utilizar memcache o algun sistema de cache de partes de la web?


Bueno, espero que te sirva la info....

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 22 Abr 2009 11:55 pm
Muchas gracias. Me surgio una pregunta, Cuando un usuario se loggea como lo activo para el sistema.-

Osea hacer una carro de comprar con sesiones no es seguro.- Se tendria que validar la informacion una ves finalizada la compra..?

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 23 Abr 2009 01:30 am
pregunta?!?! como sabes cuanto pesa una session? crea un archivo? donde lo crea? yo quiero verlo !!!!

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 23 Abr 2009 02:59 am
jcpw en tu phpinfo() hay una parte donde te dice donde esta la carpeta donde se guardan las sesiones saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 23 Abr 2009 06:19 pm
@york3rs: En un carro de compras el flow de de navegacion debe ser:


  1. Usuario entra al sitio
  2. Usuario navega por el sitio / agrega y/o quita productos a la cesta (estos datos los podes tener en memoria o en una tabla en la base de datos(es lo mas seguro y lo q hacen los carritos mas seguros y avanzados))
  3. Usuario hace checkout
  4. [OPCIONAL] Usuario se logea el usuario (solo hace falta q se guarde en la sesion algun dato q indique q el usaurio esta logeado y alguna referencia para identificarlo en la base de datos)
  5. Usaurio selecciona forma de pago / forma de envio etc
  6. Aprueba los productos que selecciono
  7. Paga / termina la transaccion


Como podes ver, no es necesario q el usaurio este logeado para seleccionar productos. Solo se logea al momento de hacer el checkout, q incluso, puede darse el caso de q no haga falta registrarse, dependera del tipo de producto q se venda y de la forma en q se venda (si solo se envia un mail al dueño de la tienda, y no se paga de manera online, no hace falta q el usuario se registre, de esta forma la experiencia del usuario sera mucho mas dinámica).

Asi q.... como veras, en un carrito de compras comun no hace falta utilizar casi nada de sesiones...

Espero q te sirva de ayuda... cualquier cosa pregunta.

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 23 Abr 2009 06:22 pm
@jpcw, la verdad q ni idea... .igualmente no importa cuanto pese una session en particular... seguramente en algun sistema (hablo de sistemas complejos o basados en sessiones exclusivamente (por lo gral intranets)) habra usaurios con sesiones gigantes y otros usuarios con sesiones minusculas....
Lo q importa en verdad es la suma total del peso de todas las sessiones q se guardan en el servidor que puede hacer q este se vea afectado en cuanto a rendimiento... igualmente es eso es para considerar cuando hay cientos de miles de usuarios o bien las sesiones pesan unos cuantos megas...


Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 24 Abr 2009 11:52 pm
@alfathenus. la duda de las sessiones es porque me nacen la ganas de poder leer el archivo de session de forma externa!, y si es asi, podria decirse que las sessiones son "INSEGURAS" por ende habría que ver como es la forma mas segura de mantener informacion en "memoria" como lo simula la session !

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 25 Abr 2009 03:34 am
jp las sesiones se almacenan pero estas se borran despues de un tiempo osea q no son inseguras

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 25 Abr 2009 06:56 pm
@talcual.. q se borren luego de un tiempo no quiere decir q sean seguras, ya q eso esta fuera de tus manos porq lo maneja el hosting.

Por otro lado, podrias encriptar/desencriptar las sessiones, o utilzar ssl (es algo obligatorio si estas haciendo un carrito de compras), validar toooodo, incluso lo q saques de la sesion.

Por otro lado, q hayan sessiones no quiere decir q sea seguro y necesario utilizarlas, mira:
1. usar como session un archivo de texto
Cuando haces session_start() se crea automaticamente un ID de session, por ejemplo UIOPO8i7987897. Biuen, si vos envez de crear guardar todo en $_SESSION[], lo guardas en un archivo de texto (o binario, creo q seria mas util) donde su nombre sea el identificador de sesion, o sea, UIOPO8i7987897.txt. Te asegura q ningun dato critico este en session. Ahora bien, asi solo, no es suficiente. Tenes q hacer q cada vez q el usuario entre a una pag de tu web/sistema modifique algo en el archivo de texto, ¿para q hacer esto? para poder validar q por ej, si el archivo no fue modificado en los ultimos 30 minutos, entonces cerras la session (esto es importante, porq si no la cerras, la puede cachear el browser, o bien el php.ini tiene su propio tiempo de vida de las sesiones q puede ir de horas a dias dependiendo como este configurado), fijate q al verificar q pasaron los 30 minutos, ademas tb borras el archivo (tb deberias crear un cron q se ejecute cada 10 dias para borrar archivos de mas de 30 minutos). Como podes ver, esta manera de tratar las sessiones es bastante mas segura q las sessiones estandar de php
2. creando tus propios handlers de session
PHP te permite crear tus propios handlers (setter y getters) para el manejo de sesiones, por lo q, cada vez q guardes algo en sesion no va a ejecutar la accion default de php, sino una q vos hayas definido, por ejemplo q se guarde en una BD (en una tabla temporal) o en un txt (explicacion anterior). Para hacer esto php te brinda funciones como esta http://ar.php.net/manual/es/function.session-set-save-handler.php


Fijense, hay muchas alternativas en internet (opensource) con respecto a hacer mas seguras las sesiones de php y muchas de ellas se basan en lo q te explique anteriormente.

jpcw escribió:

@alfathenus. la duda de las sessiones es porque me nacen la ganas de poder leer el archivo de session de forma externa!,

Mmm esto va mas alla de php... veamos, si vos estas en un ciber cafe y entras a cristalab, no cerras la sesion y viene otro y lee los archivos de firefox puede capturar tu id de session y luego, podes hacer cristalab.com?ID_SESSION=id_session_q_capturaste (no recuerdo bien si es con ID_SESSION o algo similar) y ya ta.... estas logeado al foro, ahora podes llevarte ese id y entrar desde cualquier maquina y listo.... (obvio mientras dure la session en el servidor). O sea... una session no es para nada segura. Por otro lado, la sesion puede "en teoria" ser encontrada por google (lo mismo q passwords, nombres de usuario, etc) si no programaste bien tu sitio y no le pusiste los minimos requerimientos de seguridad. Y no solo eso, tu web tb puede recibir ataques por culpa de tu hosting, mas alla de q si tu sitio es 100% seguro, si tu hosting no lo es, estas amenazado de igual manera.

Bueno, espero q no me haya ido por las nubes

Saludos!

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.