Foros del Web » Programando para Internet » PHP »

Sesiones y Base de datos.

Estas en el tema de Sesiones y Base de datos. en el foro de PHP en Foros del Web. Recuperar información de una Base de datos dentro de una Sesión Estimados Señores, He estado consultando en la FAQ sobre sesiones y no me aclaro. ...
  #1 (permalink)  
Antiguo 11/09/2005, 03:41
Avatar de raulvegaartiles  
Fecha de Ingreso: agosto-2005
Mensajes: 13
Antigüedad: 12 años, 4 meses
Puntos: 0
Sesiones y Base de datos.

Recuperar información de una Base de datos dentro de una Sesión

Estimados Señores,
He estado consultando en la FAQ sobre sesiones y no me aclaro.

Mi situación es la siguiente:

Tengo un formulario de autentificación que me consulta en una base de datos MySql el nombre de usuario y contraseña. Si todo es correcto me ingresa en el área restringida (Con capa de seguridad), sino, me resuelve la página con el formulario indicando "datos incorrectos".
Hasta aquí todo perfecto.
El problema viene, cuando una vez el usuario está en la zona restringida quiera ver sus datos personales para modificar, etc.

- ¿Como consulto la base de datos a partir de una sesión autentificada?
- ¿Tengo que hacerlo en la página de autentificación, mediante variables globales de sesión?
- Si es de esta manera, ¿Como puedo añadir a esta variable la información de ciertos campos que necesito, guardada en la base de datos?


PD: Espero no molestar con esta pregunta, pero no encuentro nada que se adapte a mi situación.
Gracias de Antemano.
  #2 (permalink)  
Antiguo 11/09/2005, 05:53
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
lo normal... es q el usuario este logeado en su panel administrativo... los datos pueden estar en SESSION[''], asi los puedes recuperar...

osea que con esos datos. realizas las consultas... para modificar...

LAS SESSIONES LO BUENO QUE TIENEN, QUE LOS DATOS ESTAN EN TODO MOMENTO EN CUALQUIER PARTE DEL SCRIPT.
__________________
3w.valenciadjs.com
3w.laislatv.com
  #3 (permalink)  
Antiguo 11/09/2005, 11:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
- ¿Como consulto la base de datos a partir de una sesión autentificada?
Como ete comenta nuevo .. las variables de sesión se "definen" y usan para que en algún momento de tu "sesión" (de estancia en tu aplicación) y script, definas unos valores en ella (variables de sesión) para luego poder accederlos/modificarlos o borrarlos en otro momento de tu estancia en tu aplicación y/o script.

Cita:
- ¿Tengo que hacerlo en la página de autentificación, mediante variables globales de sesión?
- Si es de esta manera, ¿Como puedo añadir a esta variable la información de ciertos campos que necesito, guardada en la base de datos?
Por ende, en tu script de autentificación . .defines todas las variables que identifican a tu usuario que necesites .. Normalmente un "id del usuario" que corresponde con el de tu tabla de tu BD de usuarios y .. poco más (a lo sumo su nombre para presentarselo tipo "UD. es ,.... tal").

De esta forma tendrás unas variables de sesión tipo:

$_SESSION['id_usuario'] .. esa variable que viaja en tu sesión la tomas en los scripts que necesites y operas con ella, por ejemplo para hacer consultas SQL tipo:
Código PHP:
<?
// inicio uso sesiones ...
session_start();

// Una consulta SQL para mostrar los datos de ese usaurio ...
$sql="SELECT * FROM usuarios WHERE id_usuario='".$_SESSION['id_usuario']."'";
Supongo que en tu aplicación relacionaras por un "ID" usuario los datos que tu usuario genere que sean própios .. en base a eso y sabiendo que en tu variable de sesión tienes el dato de "quien está en el sistema en esa sesión" puedes aplicar filtros de ese estilo comodamente.

TE invito también a leer sobre sesiones en la documentación oficial de PHP para más detalles:
www.php.net/session

Un saludo,
  #4 (permalink)  
Antiguo 13/09/2005, 10:54
Avatar de raulvegaartiles  
Fecha de Ingreso: agosto-2005
Mensajes: 13
Antigüedad: 12 años, 4 meses
Puntos: 0
Sonrisa Como definir las ID??

Ante nada, agradecer las respuestas,
Esto es exactamente lo que quería saber.
Si te soy sincero, siempre he visto que se le otorga una "id" a cada registro en la base de datos pero nunca lo he puesto en práctica.

-¿Tengo que crear otro campo en todos los registros llamado "id"?
-¿El número de la "id" tengo que ponerlo manualmente?? o existe alguna forma de definir la id automáticamente?


Estas preguntas no tiene que ver directamente con las sesiones pero ya que estamos hablando de esto, lo pregunto por simple curiosidad.
Muchas Gracias por la ayuda.
  #5 (permalink)  
Antiguo 13/09/2005, 15:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Todo eso que mencionas son temas del modelo de datos de una Base de datos, con sus "claves foráneas" (ese "ID" que corresponde y existe igual en todas las tablas que guarden relación).

El "ID" no se genera "automático" sino que tu en tus scripts PHP cuando generas un dato que ha de estar relacionado en "otras" tablas .. lo insertas. Así .. por ejemplo si generas (imaginemos) un "cliente" (en su tabla "cliente" y luego tienes por otro lado algún registro de otra tabla .. ejemplo "compras" .. ahí debes tener un campo más extra "ID" que será el mismo (mismo valor) que el de tu "id cliente" .. así estableces la "relación" para que luego puedas hacer consultas SQL filtradas por ese "ID" (de cliente) y por ejemplo (en este caso) obtener respuestas tipo "ver las "compras" de tal cliente".

Te recomiendo leer sobre Base de datos en alguno de los manuales de:
www.mysql-hispano.com

Un saludo,
  #6 (permalink)  
Antiguo 13/09/2005, 15:27
Avatar de davidangel  
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 12 años, 7 meses
Puntos: 0
disculpa mano pero no estoy de acuerdo con eso los ID
porq los ID de cada registro son unicos y por lo general son automatico (propiedad auto_incremen) y la relacion q tenga con otro registro se hace por medio de otro campo
o clave foranea (hablando en terminos mas serios) pero yo siempre trato de poner o crear mis tablas con el ID auto_increment (se incrementa solo) ya q estas son las primary key(o clave principal) de la tabla

bueno es solo mi punto de vista

//bueno nos vemos y suerte
  #7 (permalink)  
Antiguo 13/09/2005, 16:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por davidangel
disculpa mano pero no estoy de acuerdo con eso los ID
porq los ID de cada registro son unicos y por lo general son automatico (propiedad auto_incremen) y la relacion q tenga con otro registro se hace por medio de otro campo
o clave foranea (hablando en terminos mas serios) pero yo siempre trato de poner o crear mis tablas con el ID auto_increment (se incrementa solo) ya q estas son las primary key(o clave principal) de la tabla

bueno es solo mi punto de vista

//bueno nos vemos y suerte
Tal vez no quedó claro u omití muchas cosas por dar una explicación a la rápida sobre integridad referencial, claves foráneas y demás ..

Por eso le dejé link hacia tutoriales para que vea mejor el tema en profundidad.

Un saludo,
  #8 (permalink)  
Antiguo 14/09/2005, 01:11
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
una pregunta sobre las sesiones...
con poner session_start
sobra?
no tengo que registrarlas ni nada?
y despues $_SESSION['nombre_que_yo_quiera']=loquesea
y ya está?
sin definir nada mas?

el session_id me sirve para identificar esa sesión? es algo aleatorio no?
así que si guardo este id en la bbdd y la hora en la que se ha logueado, me puede servir para controlar la sesion, expiraciones y demas no?

es que he leido sobre session_register...
y me hago un lio
  #9 (permalink)  
Antiguo 14/09/2005, 06:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con session_start(); incias el uso de sesiones.

Y .. para "registrar" una variable de sesión .. tan sólo se ha de usar el array $_SESSION dando un indice y un valor:

$_SESSION['nombre_que_yo_quiera']="loquesea";

Lo que obtienes de session_id() es parte de lo que se denomina "SID" (Identificador único de sesión) .. Ese "SID" lo genera PHP (podrías generarlo tu también .. pero ya lo hace PHP bastante bien por nosotros).

Cita:
me puede servir para controlar la sesion, expiraciones y demas no?
Si, .. podrías usarlo con ese fin. Pero el tiempo de expiración (a no ser que fuerzes tu a mano a "matar" esa sesión (vía unset($_SESSION) y/o session_destroy()) quien determina el tiempo de expiración de tus sesiones es PHP por su directiva (php.ini): session.gc_maxtimelife principalmente .. aunque también influye el modo en que propagas el SID (por cookies o por el URL).

De las funciones de la série: session_register() .. y afines .. olvidate. Ya no se deben usar desde PHP 4.2.x si mal no recuerdo. Revisa la documentación oficial sobre sesiones: www.php.net/session (sobre todo para que veas que es el "SID" y por qué hay que "propagarlo" (sea PHP el que lo haga en una cookie o por el URL automáticamente o manualmente por tu parte).

Un saludo,
  #10 (permalink)  
Antiguo 14/09/2005, 13:32
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
gracias, ya vi lo del aviso de la version 4.2
no me habia fijado..
y ahora pensando pensando......
el session_id solo cambia cada vez que yo hago un session_id no?
mientras tanto permanece el mismo...
igual no me va a servir para lo que decia... o no es tan sencillo como creia

pensaba en guardar el valor del session_id en otra variable de sesion no se... $_SESSION['identificador']=session_id();
y tal vez guardarlos en la bbdd para tener un control de a que hora se logueo y demas

pero quizas tenga el problema de si cierras el navegador a las brabas.....
no se.... es muy descabellado lo que pienso?
  #11 (permalink)  
Antiguo 14/09/2005, 13:47
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
Cita:
Iniciado por cyborg
y ahora pensando pensando......
el session_id solo cambia cada vez que yo hago un session_id no?
mientras tanto permanece el mismo...
igual no me va a servir para lo que decia... o no es tan sencillo como creia

http://es2.php.net/manual/es/functio...on-destroy.php

Código PHP:
session_destroy(); 
puedes guardar el ID en una cookie tb
__________________
3w.valenciadjs.com
3w.laislatv.com
  #12 (permalink)  
Antiguo 14/09/2005, 16:41
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
no, no quiero guardar cookies, por los firewalls que bloquean

no se.. creo que estoy muy muy perdido
sobre como tener un control de la sesion si el usuario cierra el navegador por las buenas
se supone que no deberia perder la sesion al volver a cargar la pagina no?
en ese caso las variables de sesion seguirian existiendo?
  #13 (permalink)  
Antiguo 14/09/2005, 20:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por cyborg
gracias, ya vi lo del aviso de la version 4.2
no me habia fijado..
y ahora pensando pensando......
el session_id solo cambia cada vez que yo hago un session_id no?
mientras tanto permanece el mismo...
igual no me va a servir para lo que decia... o no es tan sencillo como creia

pensaba en guardar el valor del session_id en otra variable de sesion no se... $_SESSION['identificador']=session_id();
y tal vez guardarlos en la bbdd para tener un control de a que hora se logueo y demas

pero quizas tenga el problema de si cierras el navegador a las brabas.....
no se.... es muy descabellado lo que pienso?
No tiene sentido guardarte el SID en una variable de sesión .. ese dato (el SID) ya lo obtienes usando session_name() + session_id() o directamente la constante SID:

ejemplo:
Código PHP:
<?
session_start
();
echo 
SID;
?>
session_id() lo puedes usar de dos formas:
1) si lo usas como session_id() .. obtienes el ID de sesión asignado en ese momento para esa sesión en curso.
2) si le das un valor (session_id("algundato")) ahí estarás forzando tu própio "ID" de sesión. Recuerda que un ID de sesión ha de ser único .. por eso PHP genera ya por sí solo un "MD5" para hacerlo único.

Cita:
y tal vez guardarlos en la bbdd para tener un control de a que hora se logueo y demas

pero quizas tenga el problema de si cierras el navegador a las brabas.....
no se.... es muy descabellado lo que pienso?
Las sesiones de PHP standar (las que genara PHP por defecto) no tienen control sobre todo eso. En tu sistema de gestión de usuarios perfectamente (uses sesiones o no) puedes guardarte la fecha que ingresó tu usuario, actualizar otro campo que guarde la fecha de la última iteracción con tu sistema (que recargó una página, ejectó tal script.php .. etc) y con esos datos determinar si tu usaurio sigue en el sistema o no con su margen de error .. pues vas a tener que decidir que "si no ha ocurrido actividad (recargó una página .. llamó a un script.php por un link, formulario ..etc donde registras esa fecha de iteracción) ha pasado más de N tiempo .. ahí consideraras que tu usuario ya no está en el sistema .. es decir, que salió del sistema de forma anormal (no por tus "logout" que implementes) ya sea que cerró su navegador o similar.

Esto es parte de las técnicas que usan los sistemas de "usuarios en línea" (que veras ejemplos en las FAQ's de este foro PHP).

Por otro lado, tienes funciones en PHP para detectar que un cliente ha cerrado su conexión .. pero sólo en el trasncurso de la ejecución de un script .. lo cual suele ser tan rápido que no te sirve para tus propositos, es decir . una vez entregada la página resultante de la ejecución de tu script PHP al cliente (navegador).

Un saludo,
  #14 (permalink)  
Antiguo 14/09/2005, 20:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Hasta PHP recomienda preferentemente propagar el SID en una cookie (las que PHP crea si así lo decides) ... más que nada por tu seguridad. Por supuesto que debes avisarlo a tus usaurios y que estos si -realmente- están interesados en usar tus sistemas .. ya autorizarán a sus firewalls y demás bloqueo de cookies que dispongan la aceptación de la que tu sitio va a emitir.

Lee este documento sobre los pros y contras de propagar el SID en el URL:

http://www.acros.si/papers/session_fixation.pdf

(en la versión en ingles de la documentación oficial .. se hace mención al PDF que te indico)
http://www.php.net/manual/en/ref.session.php

Un saludo,
  #15 (permalink)  
Antiguo 15/09/2005, 00:51
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
gracias
me parece que me voy a ir liando poco a poco
pensaba que cada vez que hacia un session_id();
me generaba un id distinto.. ya veo que no, pero si que lo hace al cerrar y volver a abrir el navegador, con lo que tendría el problema descrito y el id no me serviría de mucho (eso si es que me he enterado de algo :p )
aja recomienda propagarlos por cookies (ahora tengo que averiguar si el id de la sesion realmente me sirve de algo, y ver como narices se hace por cookies) pero.. usando la constante SID se está propagando por la url?

en el pdf que me has pasado, supongo que el servidor usa el id de la sesion para saber que usuario es no? vamos que debe guardar una relacion del usuario con el id de la sesion en algun sitio (tabla o lo que sea)

aunque ahora que lo dices es verdad que si estando logueado en el foro, borras cookies, dejas de aparecer como logueado, al menos de forma local
  #16 (permalink)  
Antiguo 15/09/2005, 13:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El SID en sesiones es el identificador único que relaciona el archivo (datos) de tu sesión con el cliente que la inició. (no hablemos de "usuarios" .. por qué eso lo defines tu en tus aplicaciones .. PHP en cuanto a sesiones sólo entiende de "clientes" = PC's)

Al "cerrar tu navegador" y NO por arte de mágia .. lo que haces es (si propagas el SID en cookies) perder el "nexo" que es tu cookie que lleva como uno de sus valores el SID en ella con el servidor. Pierdes el SID .. y si sigues usando sesiones (session_start()) .. se genera un nuevo SID por qué se generó un nuevo archivo en el servidor como "contenedor" de tus variables de sesión.

Pero .. bueno .. ahí está el tema de la propagación del SID, si tu mantienes ese SID entre tus scripts (propagandolo sea por una cookie o por el URL) .. nunca perderas esa sesión en curso.

Intenta leer las FAQ's del foro y otros comentarios sobre sesiones del foro .. ahí se explica algo de "como funcionan" las Sesiones.

Un saludo,
  #17 (permalink)  
Antiguo 15/09/2005, 14:26
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
si bueno intentaré leer mas
no se como lo tendra solucionado este foro.. bueno la mayoria
pero si yo ahora cierro el navegador cuando vuelvo a cargar la pagina sigo logueado

gracias
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 20:01.