Foros del Web » Programando para Internet » PHP »

sesiones van y no van

Estas en el tema de sesiones van y no van en el foro de PHP en Foros del Web. Bueno en este tema estoy mas verde que una lechuga esto que he creado lo he puesto a partir de ver los post con las ...
  #1 (permalink)  
Antiguo 23/06/2004, 14:35
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 22 años, 5 meses
Puntos: 0
Mensaje sesiones van y no van

Bueno en este tema estoy mas verde que una lechuga esto que he creado lo he puesto a partir de ver los post con las explicaciones.
1 Tengo una web donde los usuarios se loguean y se declara la sesion:
Código PHP:
session_name("logueandose");
session_start();
$_SESSION['id_user']=$_POST['id'];
$_SESSION['pass_user']=$_POST['password'];
$url="users.php?".SID;
header ("location: $url");
exit; 
Esto me lleva a una pagina en la cual en su principio tengo este codigo:
Código PHP:
session_name("logueandose"); 
session_start(); 
if (! isset(
$_SESSION['id_user'])) { 
header("location: editar.php"); 
exit; 
}
// Declaro las variables que paso
$id $_SESSION['id_user'];
$pass $_SESSION['pass_user']; 
Y aqui viene mi duda, en esa pagina tengo varios enlaces para editar los datos de este usuario logueado.
como paso la sesion a la pagina de editar ¿? (yo tengo pero no va)
Código PHP:
<class="negro" href="us_editar.php?id=$id">[Cambiar datos &quot;generales&quot;]</a
Pero no coge el $id, y mi otra duda es ¿que pongo en esas paginas de "us_editar.php" en su cabecera, lo mismo que en esta?
Gracias.
__________________
Seguro que ahora me sale mejor!
  #2 (permalink)  
Antiguo 23/06/2004, 15:57
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
si el usuario ya está "logeado" y ya guardaste en una variable de sesión su Id. Entonces no es necesario pasar por URL (pagina.php?variable=$valor) el id, simplemente en la página us_editar utiliza la variable de sesión donde guardas el id. La variable de sesión estávigente durante toda la sesión, valga la redundancia. No importa que cambies de página, si cada página contiene al inicio, antes que cualquier cosa (incluyendo cualquier espacio en blanco) <?php session_start(); ?>

con eso le dices al servidor, que incluya todas las varibales que ese navegador en específico tenga guardadas en el servidor, o con cookies.

Un saludo
  #3 (permalink)  
Antiguo 24/06/2004, 04:35
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 22 años, 5 meses
Puntos: 0
Pero el caso es que uso ese $id para sacar los datos de la base de datos:
Código PHP:
// Declaro las variables que paso (digo yo)
$id $_SESSION['id_user'];
$pass $_SESSION['pass_user'];

$sql "SELECT * from dr_anuncio WHERE id='$id'";
$res mysql_query ($sql) or die (mysql_Error());

if (
$row =mysql_fetch_array ($res)){  
// Si hay datos
list ($act,$fecha,$nombre,$texto) = mysql_fetch_array($res);
}else{
//no hay datos
echo "error al buscar el anuncio";
exit;
}
echo 
"$nombre"//no sale
echo "$id"// si sale 
pero cuando llamo a las variables de la base de datos que corresponden con ese "id" no me aparecen, si me aparece el id, pero el resto no.
__________________
Seguro que ahora me sale mejor!

Última edición por benti; 24/06/2004 a las 04:42
  #4 (permalink)  
Antiguo 24/06/2004, 08:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El problema no es con sesiones .. sino con la consulta SQL que haces y como obtienes sus resultados ..

Las funciones mysql_fetch_xxx() de PHP hacen lo siguiente:
"Obtienen un resultado de tu consulta (registro) y mueven el puntero a la siguiente posición".

Si tu haces un "if()" pero asignando $row par "psudo-comprobar" que el resultado de tu consulta se ejecutó.. ya estás "moviendo" el puntero del resultado a la siguiente posición de resultados .. Y, supongo que por el tipo de consulta y datos que són sólo obtendras un resultado o cero resultados de tu SQL ..

Si quieres hacerlo como lo estabas implementado tendrias que usar:

Código PHP:
if ($row =mysql_fetch_array ($res)){   
// Si hay datos 
list ($act,$fecha,$nombre,$texto) = $row
}else{ 
//no hay datos 
echo "error al buscar el anuncio"
exit; 

echo 
"$nombre"//no sale 
echo "$id"// si sale 
Pero yo haría:

Código PHP:
if (mysql_num_rows($res) == 1){
   
// Si hay datos 
   
list ($act,$fecha,$nombre,$texto) = mysql_fetch_array ($res);
}else{ 
   
//no hay datos 
   
echo "error al buscar el anuncio"
   exit; 

Y mejor todavía para evitar problemas con los nombres/orden de los campos que use en el SQL empleado:

Código PHP:
if (mysql_num_rows($res) == 1){
   
// Si hay datos 
    
$row=mysql_array_array ($res);
    echo 
$row['nombre'];
    echo 
$row['otro_campo'];
}else{ 
   
//no hay datos 
   
echo "error al buscar el anuncio"
   exit; 

La función myslq_num_rows() Cuenta el total de registros que arrojó tu consulta SQL (record-set) .. así que me baso en ese resultado para saber si hay registros (uno es lo que espero si esos ID son únicos) o no que mostrar mas que en que si la función arrojó o no un error al ejecutarse.

Un saludo,

Última edición por Cluster; 24/06/2004 a las 08:02
  #5 (permalink)  
Antiguo 24/06/2004, 09:07
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 22 años, 5 meses
Puntos: 0
Ahora puedo recoger los datos, pero a veces me sale la sesion y otras no, en la barra del navegador unas veces me logueo y aparece algo como esto: secciones/users.php?loguearse=aADF313553PMKOON
Y otras no, eso es asi ¿?
__________________
Seguro que ahora me sale mejor!
  #6 (permalink)  
Antiguo 24/06/2004, 09:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. eso es por la configuración de la propagación del SID que haces .. Por lo que mencionas estás propagando el SID en cookies pero también usas session.use_trans_sid = 1 lo cual fuerza a PHP a que sobre-escriba ciertos tags HTML como los links para propagar el SID.

Las cookeis sólo son disponibles en la primera iteracción con el servidor .. así que si tu haces en tu "index.php" (o pagína que entres directo) un session_start() .. PHP (con la configuración mencionda) "imprime" el SID en tus links y .. al pedir la 2º página se crea la cookie. Las N restantes usaran el SID propagado en la cookie .. Por eso "algunas veces ves el SID en el url y otras no" (o por lo menos así es como suele suceder).

Usa el buscador del foro .. constantemente se tratan estos temas sobre sesiones.

Un saludo,
  #7 (permalink)  
Antiguo 24/06/2004, 09:26
Avatar de benti  
Fecha de Ingreso: octubre-2001
Ubicación: Benidorm
Mensajes: 413
Antigüedad: 22 años, 5 meses
Puntos: 0
OK Cluster pero eso influye en la seguridad o en el funcionamiento de esas paginas ¿?
__________________
Seguro que ahora me sale mejor!
  #8 (permalink)  
Antiguo 24/06/2004, 11:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues si, afecta a seguridad y al funcionamiento de estas.

En cuanto al funcionamiento:

Si propagas el SID en cookies si tocas con un navegador que no acepte cookies no te irá tu sistema .. o mejor dicho irá (ya que usas session.use_trans_sid = 1 al parecer) las páginas que saltes de una a otra por links o formularios . .pero si en alguna abres una ventana (con javascript: window.open .. ) o usas un redireccionamiento javascript o PHP (header ("location ...") ahí no te irá tu aplicación (perderas el SID).

En cuanto a seguridad ..
Lo más seguro es usar cookies para propagar el SID (con sus desventajas como la de requerir un navegador que acepte cookies). El SID identifica tu sesión y la relaciona con los datos que están el el servidor .. así que si propagas el SID en el URL y me "pasas" un URL con ese SID, podría retomar los datos de esa sesión y continuar con una sesión que no me pertenece. Por cookies, ese SID nunca se vé (ni en el URL ni en el código si usas sesssion.use_trans_sid a 0) así que te evitas ese "pelígro".

Tienes más información en:
www.php.net/session de lectura -OBLIGADA- si se va a trabajar con sesiones. Las sesiones es una de las cosas de PHP que más requiere que se sepa la configuración y como funciona esta ... pues influye en temas de seguridad y sobre todo en la forma que se va a comportar tu aplicación según la configuración que uses de PHP al respecto.

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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 13:39.