Foros del Web » Programando para Internet » PHP »

Por qué no se usan variables de sesión

Estas en el tema de Por qué no se usan variables de sesión en el foro de PHP en Foros del Web. Hola a todo el mundo, Estoyt revisando algunas aplicaciones pre-fabricadas (phpbb2, Advanced) que es probable que tenga que usar, y me he dado cuenta que ...
  #1 (permalink)  
Antiguo 25/04/2005, 06:24
 
Fecha de Ingreso: agosto-2003
Ubicación: Málaga, España
Mensajes: 407
Antigüedad: 14 años, 4 meses
Puntos: 1
Por qué no se usan variables de sesión

Hola a todo el mundo,

Estoyt revisando algunas aplicaciones pre-fabricadas (phpbb2, Advanced) que es probable que tenga que usar, y me he dado cuenta que al contrario de lo que yo suelo hacer, las sesiones no las realizan con variables de este tipo sino simulandolo de otras formas y almacenando en la Base de datos la sesión etc.

¿Alguien sabe explicarme por qué y que ventajas tiene?
¿Plantea problemas de seguridad usar variables de sesión?

Gracias y un saludo
Miguel
  #2 (permalink)  
Antiguo 09/05/2005, 07:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. en principio como ya sabes .. PHP incorpora "de série" su própia gestión de sesiones, donde "por defecto" (se puede cambiar) se crean archivos en el servidor que son los "contenedores" de tus variables de sesión. La "asociación" (o correspondencia) entre el "cliente" que las crea y a quien le pertence esa sesión (archivo del servidor) lo hace por el SID (Identificador de sesión: nombre_sesion+id_sesion). Ese "SID" se puede propagar en cookies o en el URL (tu eliges como lo vas hacer en tu aplicación y en consecuencia ajustas la configuración de PHP).

Bien ... eso es un "método" de gestión de sesiones. De por sí si has trabajado con ellas podrás ver que tiene algunos "problemas"; por ejemplo ... identificar cuanto tiempo le queda de vida a una sesión determinada .. o cuantas sesiones tenemos activas no es posible obtener esos datos con la gestión de sesiones comunes de PHP.

Por esto .. si quieres tener un control más "fino" sobre tus sesiones, se suelen implementar dichos sistemas "a mano". Si nos fijamos en la teoría de lo qu es una "sesión" .. lo único que necesitas es:

1) identificar como único N datos que pertenezcan a 1 cliente
2) almacenar esos datos en algún sistema.

EL punto 1 .. sería la de crear un "SID" (identificador único de sesión) que como suele ser es un dato aletaorio y que no se repita. Ese dato se ha de propagar al cliente en los links que este ocasione para que puedas hacer referencia en tu sistema de almacenamiento y puedas leer/escribir datos en ella.

El "médio" de almacenamiento podría ser un archivo de texto plano .. pero también (mejor administrable) una Base de datos. De esta forma .. puedes hacer una consulta a tu BD (tabla de "sesiones") y fácilmente obtener datos como "cuantas sesiones hay activas" ... cuanto tipo le queda (si defines datos anexos como "comienzo sesión" y fecha de última actualización .. ) etc.

Un saludo,
  #3 (permalink)  
Antiguo 09/05/2005, 08:55
 
Fecha de Ingreso: agosto-2003
Ubicación: Málaga, España
Mensajes: 407
Antigüedad: 14 años, 4 meses
Puntos: 1
Muchas gracias, pues considero muy completa tu respuesta.

Ahora bien, he visto que la mayoría de las 'pre-fabricadas' propagan en TODOS los enlaces de la supuesta herramienta de administración el SID, y el UID (ID usuario) además del resto de parámetros que tengan que pasar. ¿Es esto lo mejor? lo digo porque parace que hace un poco inflexible a la herramienta partir con esa condición para cualquier cosa que se tenga que añadir.

En caso de que haya mejor manera, a ver si nos pones algún ejmplo.
Saludos.
  #4 (permalink)  
Antiguo 09/05/2005, 10:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Es que el SID .. (si hablamos que esa aplicación use las sesiones nativas de PHP) lo propagará por el URL en modo automático ..

La directiva:
session.use_trans_sid = ON

hace que PHP tome todo tag de link (<a href ...>) y algunos más para sobre-escribir en él dicho SID. Otras variables como que necesite propagar por el URL y no haga en la sesión ya es cosa particular de cada aplicación ...

Lo más seguro (según fuente:PHP) es propagar el SID en cookies .. por ende no veras ese SID en el URL .. eso va bien en cuanto a seguridad vs a que requieres que tus clientes (la gente que use tus aplicaciones y sus navegadores) acepte cookies. Cosa que tampoco podras conseguir en todos los casos.
La propagación del SID en cookies se activa y ya te olvidas del SID, sólo "avisar" que tus usuarios deben aceptar dicha cookie.

Por ejemplo propagar una variable que sirva para "paginar" datos (de un listado de registros) .. o para definir un "filtrado" (ejemplo ordenado=tal .. ) o que identifique el registro tal (noticia=1 .. o usuario=23 .. etc) es recomendable pasarlo por el URL .. entre otras cosas por qué seguro que en algún momento quieres guardarte ese "link" en tus favoritos o ponerlo en algún sitio de tu web u otra para ir directo a esa "información" que así se relaciona .. Si lo hicieras por una sesión no podrías hacer eso.

Por eso mismo las sesiones se usan para propagar variables "temporales" que duran eso mismo .. "un rato en el sistema" (sesion) desde que "entra" hasta que "sale". Variables tipo "usuario tal" .. "nivel de acceso en el sistema tal" .. "preferencias dentro del sistema" .. y en general datos que no se permita o sea peligroso que si lo "alteran" puedan ocasionar problemas en tu aplicación.

Un saludo,
  #5 (permalink)  
Antiguo 09/05/2005, 12:51
 
Fecha de Ingreso: agosto-2003
Ubicación: Málaga, España
Mensajes: 407
Antigüedad: 14 años, 4 meses
Puntos: 1
OK, muchas gracias. Al final seguro que hago un paso del SID en cada enlace, y almaceno en tabla el SID relacionado con su usuario, como hacen la mayoría y como imaginaba, por ello es lo por lo que lo usan (porque llevan su tiempo estudiando esto). Sólo que no puedo avanzar sin conocer las respuestas.

Un saludo.
Miguel.
  #6 (permalink)  
Antiguo 09/05/2005, 15:15
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
Cluster, dices que la mejor forma (según PHP) es pasar el SID por cookies. Me dices cómo o un enlace donde lo expliquen?
Nunca he trabajao con cookies, pero más o menos sé como van. Imagino que será algo de guardar el valor del sid en la cookie, vale. Pero luego cómo accedo a las variables de sesión a través del sid? Gracias
__________________
Mi página personal: Julián Urbano
  #7 (permalink)  
Antiguo 09/05/2005, 15:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Así es .. si dices a PHP que lo haga así (propagación del SID en cookies) vía:

session.use_only_cookies = ON ..

Será PHP el que genere esa cookie con el SID en el ..-sólo el identificador de sesión- .. en ningún momento los datos que siguen permaneciendo en el servidor.

Cuando tu decides usar "sesiones" usas la función:
session_start()

Dicha función -por defecto- busca un "SID" válido propagado en el URL o la cookie que crea el mismo. Si no lo encuentra ahí se genera un SID nuevo (y archivo en el servidor en consecuencia).

El uso de "sesiones" es exactamente igual si propagas el SID en cookies o en el URL a nivel de acceso a las variables en sí .. lo único que cambia es que no es necesario que propagues el SID -a mano- en cada link/redireccionamiento que hagas hacia otro script para "continuar" con la sesión activa. Ya lo haras en la cookie (y lo hace PHP .. automáticamente si se lo indicas)

En la documentación oficial tienes información:
www.php.net/session

Y sobre temas de seguridad en sesiones (leelo bauhaus1975 también):
http://www.acros.si/papers/session_fixation.pdf
(el link está en la versión en ingles de la documentación oficial sobre sesiones. Está más completa que en castellano).


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 19:58.