Foros del Web » Programando para Internet » PHP »

Tremendo lío de sesiones!!

Estas en el tema de Tremendo lío de sesiones!! en el foro de PHP en Foros del Web. Hola a tod@s! Estoy probando lo de las sesiones para intentar cogerle el "truquillo"... primero creé un login en el que al poner el nombre, ...

  #1 (permalink)  
Antiguo 19/12/2007, 07:28
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Tremendo lío de sesiones!!

Hola a tod@s!

Estoy probando lo de las sesiones para intentar cogerle el "truquillo"...

primero creé un login en el que al poner el nombre, si era correcto, redirigía el usuario a una página donde veia una lista de variables relacionadas con él.

Al intentarlo hacerlo con dos usuarios, es decir, dos logins, y dos sesiones, me encuentro con que cada vez me crea una sesión diferente

os paso los scripts, porque creo que no me explique muy bien,....

FORMULARIO
Código PHP:
<form action="prueba2.php" method="post">
<
input type="text" name="usuario" />
<
input type="submit" value="conectar" /> 
PROCESANDO EL LOGIN
Código PHP:
$a=session_name($_POST['usuario']);
$_SESSION['registro']=$_POST['usuario'];
if(!isset($a)){
header('Location:prueba2b.html');
}else{
header('Location:prueba2_1.php?<?echo session_name()."=".session_id()?>');
}
DONDE DEBERÍA IMPRIMIRSE LA INFORMACIÓN SI CONSIGUE LOGUEARSE
Código PHP:
session_name($_SESSION['registro']);
session_start();
?>
<h2>acceso desde prueba 1</h2>
<?php
echo session_name();
echo 
"La id de la sesión es: ",session_id();
echo 
"<br>";
echo 
$_SESSION['nombre'];
echo 
"<br>";
echo 
$_SESSION['apellido'];
echo 
"<br>";
echo 
$_SESSION['edad'];
echo 
"<br>";
echo 
$_SESSION['altura'];
echo 
"<br>";
echo 
$_SESSION['nacionalidad'];
echo 
"<br>";
PÁGINA DONDE DEFINO LAS VARIABLES DEL USUARIO EN CUESTIÓN
(de estas hay dos, una por usuario, cada una con un nombre de sesión distinto)
Código PHP:
session_name('usuario1');
session_start();

$_ENV[REQUEST_METHOD];
$nombre="usu1";
$_SESSION['nombre']=$nombre;

$apellido="dearriba de la calle";
$_SESSION['apellido']=$apellido;

$edad="25";
$_SESSION['edad']=$edad;

$altura="180cm";
$_SESSION['altura']=$altura;

$nac="de Cuenca";
$_SESSION['nacionalidad']=$nac
Alguién sabe que es lo que estoy haciendo mal??
Muchas gracias
  #2 (permalink)  
Antiguo 19/12/2007, 08:09
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Re: Tremendo lío de sesiones!!

debes colocar session_start(); antes de trabajar con sessiones por eso es que nunca te va a mostrar

incorrecto!
session_name('usuario1');
session_start();
// codigo

correcto!
session_start();
session_name('usuario1');

// codigo
  #3 (permalink)  
Antiguo 19/12/2007, 08:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Ei! Gracias, ya tengo algo solucionado.
Al menos ahora mantiene la id de sesión cuando actualizo, pero no se me imprimen las variables,...

sabes por que??
muchas gracias
  #4 (permalink)  
Antiguo 19/12/2007, 09:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

ayuda por favor...
  #5 (permalink)  
Antiguo 19/12/2007, 09:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Tu código de asignación esta bien, pero el problema es a la hora de desplegarlas, usas session_name con una variable de sesión y posteriormente llamas a session_start, eso esta mal, ya que antes de llamar a session_start $_SESSION no existe, es decir:
Código PHP:
session_name$_SESSION['registro'] );
// es igual a
session_namenull ); // error 
No necesitas llamar a cada sesión diferente, el nombre que le das a la sesión es por si necesitas referenciar a dos sesiones diferentes, pero ten en cuenta que las sesiones NUNCA va a existir colisión entre ellas (por decir entre dos usuarios al mismo tiempo).

Saludos.
  #6 (permalink)  
Antiguo 19/12/2007, 10:39
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Gracias por tu respuesta GatorV!!

La entendí a nivel conceptual, pero no sé llevarla a la práctica (me podrías dar algunas pistas más al respecto).

Cita:
No necesitas llamar a cada sesión diferente, el nombre que le das a la sesión es por si necesitas referenciar a dos sesiones diferentes, pero ten en cuenta que las sesiones NUNCA va a existir colisión entre ellas (por decir entre dos usuarios al mismo tiempo).
Con esto quieres decir que el último de mis scripts donde pongo, p.ej.
Código PHP:
session_name('usuario1'
es innecesario?

Cómo puedo hacerlo entonces?

Si es así como puedo hacer que se impriman las variables del usuario que se ha logueado?


Gracias por todo. Siento preguntar tanto, pero tu respuesta arroja luz a dudas que no sabía que tenía
saludos
  #7 (permalink)  
Antiguo 19/12/2007, 10:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Prueba un ejemplo sencillo:
formulario:
Código PHP:
<form action="login.php" method="post">
<
input type="text" name="usuario" />
<
input type="submit" value="conectar" /> 
login.php:
Código PHP:
session_start();
$_SESSION['usuario'] = $_POST['usuario'];
header"Location: pagina_inicio.php" ); 
pagina_inicio.php:
Código PHP:
session_start();
echo 
sprintf"El usuario actual es: %s"$_SESSION['usuario']; 
Saludos.
  #8 (permalink)  
Antiguo 19/12/2007, 11:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Hola, con tu ejemplo veo que no necesito un nombre de sesión por cada usuario.

Pero, cómo logro que según se loguee un usuario o otro se impriman los valores de las variables que corresponden a ese usuario.
Ejemplo:
Cuando se loguee Juan, la variable $sexo=hombre.
Cuando se loguee Maria, la variable $sexo=mujer.

Cómo puedo hacer eso?
Saludos!
  #9 (permalink)  
Antiguo 19/12/2007, 11:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Pues solo comparas:
Código PHP:
if( $_SESSION['usuario'] == "Juan" ) {
         
$sexo "hombre";
} else {
        if( 
$_SESSION['usuario'] == "Maria" ) {
                
$sexo "mujer";
        }

Saludos.
  #10 (permalink)  
Antiguo 19/12/2007, 12:28
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Gracias de nuevo!
Pero eso no es exactamente lo que quiero conseguir.

Te comento brevemente lo que he hecho y lo que pretendo con ello. Además del formulario, el script donde proceso la información, y el final (por así decirlo), tengo otros dos (uno por cada usuario de prueba).

En esos dos scripts de usuarios, defino de variables de sesión iguales.
Es decir, los dos tienen:
Código PHP:
$_SESSION['nombre']
$_SESSION['apellido'],.... 
...pero obviamente con valores distintos.

Lo que pretendo es que, dependiendo del nombre de estos dos usuarios que escriba en el formulario se impriman las variables con el valor correspondiente.

Gracias por tu ayuda.
Saludos!
  #11 (permalink)  
Antiguo 19/12/2007, 12:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Las variables de Sesión son únicas por usuario, es decir, si usuario A entra y pone su nombre todo lo que este en $_SESSION es de ese usuario, si usuario B entra, igual tiene su arreglo $_SESSION.

Pero estos dos no se comunican entre ellos, si quieres almacenar información común, necesitas usar un medio persistente relacional para identificación, es decir una base de datos donde puedas consultar el usuario A con su clave y el usuario B con su clave.

Saludos.
  #12 (permalink)  
Antiguo 19/12/2007, 13:06
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

ok!
es decir, lo que comento no lo puedo hacer sin MySQL, verdad?

Muchas gracias de nuevo.

Por cierto, sabes cómo puedo evitar que usuarios sin login puedan acceder a una página que requiere login??

Mil gracias por la ayuda!
  #13 (permalink)  
Antiguo 19/12/2007, 13:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

No lo puedes hacer sin MySQL, ya que las sesiones son unicas para cada usuario y no hay forma de comunicar (con el motor predeterminado de las sesiones) las sesiones.

Para hacer un login solo levantas una variable de sesion, y la compruebas en cada pagina si existe y le permites el paso:
Código PHP:
session_start();
if( 
$_SESSION['loggedIn'] !== true ) {
      die( 
"No estas autorizado" );

Saludos.
  #14 (permalink)  
Antiguo 19/12/2007, 13:15
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Mil gracias!!

Donde puedo seguir con el tema de las sesiones, conoces algún Tutorial potente?
  #15 (permalink)  
Antiguo 19/12/2007, 13:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Te recomiendo que leas el manual de PHP en la sección de Sesiones, tiene toda la información que puedas necesitar.

Saludos.
  #16 (permalink)  
Antiguo 19/12/2007, 13:19
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo Re: Tremendo lío de sesiones!!

Con lo referente a lo que te comenta GatorV te sugiero que le heches un ojo a este link http://mx.php.net/session

Saludillos.
  #17 (permalink)  
Antiguo 19/12/2007, 13:31
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

gracias por la ayuda!
Saludos!
  #18 (permalink)  
Antiguo 19/12/2007, 14:03
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Cita:
Iniciado por GatorV Ver Mensaje
No lo puedes hacer sin MySQL, ya que las sesiones son unicas para cada usuario y no hay forma de comunicar (con el motor predeterminado de las sesiones) las sesiones.

Para hacer un login solo levantas una variable de sesion, y la compruebas en cada pagina si existe y le permites el paso:
Código PHP:
session_start();
if( 
$_SESSION['loggedIn'] !== true ) {
      die( 
"No estas autorizado" );

Saludos.
hey, no me sale...

al poner esto en mi codigo me sale siempre: no estas autorizado.

definí la variable $_SESSION['loggedIn'].


Qué crees que puede ser?
Gracias,
saludos
  #19 (permalink)  
Antiguo 19/12/2007, 16:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Pon tu código como lo estas definiendo.

Saludos.
  #20 (permalink)  
Antiguo 20/12/2007, 03:07
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Ahí va el código:
FORMULARIO
Código PHP:
<form action="prueba1.php" method="post">
<
input type="text" name="usuario" />
<
input type="submit" value="conectar" /> 
SCRIPT DONDE PROCESO INFO
Código PHP:
<?php
session_start
();
if(
$_SESSION['loggedIn'] !== true ) {
      die(
"no estás autorizado" );
}
$_ENV[REQUEST_METHOD];
$nombre="Aitor";
$_SESSION['nombre']=$nombre;

$_SESSION['loggedIn']=true##aquí también probé simplemente con
                                               ##$_SESSION['loggedIn']

$apellido="Tilla";
$_SESSION['apellido']=$apellido;

$edad="25";
$_SESSION['edad']=$edad;

$altura="180cm";
$_SESSION['altura']=$altura;

$nac="Spaniard";
$_SESSION['nacionalidad']=$nac;

if(
'aitortilla'==$_POST['usuario']){
header('Location:prueba1_1.php');
}else{
header('Location:prueba1b.html');
}
?>
SCRIPT DÓNDE SE IMPRIME LA INFO
Código PHP:
<?php
session_start
();
if(
$_SESSION['xavibarra'] !== true ) {
      die(
"no estás autorizado" );
}
?>
<h2>acceso desde prueba 1</h2>
<?php
echo "La id de la sesión es: ",session_id();
echo 
"<br>";
echo 
$_SESSION['nombre'];
echo 
"<br>";
echo 
$_SESSION['apellido'];
echo 
"<br>";
echo 
$_SESSION['edad'];
echo 
"<br>";
echo 
$_SESSION['altura'];
echo 
"<br>";
echo 
$_SESSION['nacionalidad'];
echo 
"<br>";
echo 
"<a href='logout.php?<?echo session_name.'='.session_id ?>'>salir</a>";
?>
Muchas gracias!
  #21 (permalink)  
Antiguo 20/12/2007, 08:35
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Re: Tremendo lío de sesiones!!

mm tienes lo siguiente:

Código PHP:
if($_SESSION['loggedIn'] !== true ) {
      die(
"no estás autorizado" );
}
//Código
$_SESSION['loggedIn']=true##aquí también probé simplemente con 
En teoria en donde se tendria que inicializar tu variable de sesion "loggedIn"?
Por que por lógica que manejas nunca se va inicilizar y nunca "vas a estar autorizado"

Si pusieras las declaración de tu variable antes ya no habria problema

Código PHP:
$_SESSION['loggedIn']=true##aquí también probé simplemente con

if($_SESSION['loggedIn'] !== true ) {
      die(
"no estás autorizado" );
}
//Código 
Saludillos.
  #22 (permalink)  
Antiguo 20/12/2007, 08:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Tienes razón.

Pero, haciendo eso se puede acceder a la página donde está la información sin necesidad de logearse.

soluciona un problema, pero me devuelve el anterior.

Saludos!
  #23 (permalink)  
Antiguo 20/12/2007, 08:58
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Re: Tremendo lío de sesiones!!

jeje te pregunto lo mismo En teoria en donde se tendria que inicializar tu variable de sesion "loggedIn"?, para que de esta forma inicializar dicha variable y verificar si es necesario logearse en el sitio, de hecho podrias redireccionar a la pagina donde se tendrian que logear tus usuarios en caso de no estar "autentificados"

Código PHP:
if($_SESSION['loggedIn'] !== true ) {
header("Location: milogin.php");
      
//die("no estás autorizado" );

La pregunta del millon seria, en donde estas realizando la autentificación de los usuarios? o no la haces?

Saludillos

Última edición por mauled; 20/12/2007 a las 09:04
  #24 (permalink)  
Antiguo 20/12/2007, 09:49
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

jeje, lo siento por el lío que estoy armando.

La respuesta a tu pregunta:
Cita:
donde se tendria que inicializar tu variable de sesion "loggedIn"?
Este es el script en el que compruebo si el usuario pone el único nombre registrado
Código PHP:
<?php
session_start
();
if(
$_SESSION['loggedIn'] !== true ) {
      die(
"no estás autorizado" );
}
$_ENV[REQUEST_METHOD];
$nombre="Aitor";
$_SESSION['nombre']=$nombre;

$_SESSION['loggedIn']=true##aquí también probé simplemente con
                                               ##$_SESSION['loggedIn']

$apellido="Tilla";
$_SESSION['apellido']=$apellido;

$edad="25";
$_SESSION['edad']=$edad;

$altura="180cm";
$_SESSION['altura']=$altura;

$nac="Spaniard";
$_SESSION['nacionalidad']=$nac;

if(
'aitortilla'==$_POST['usuario']){
header('Location:prueba1_1.php');
}else{
header('Location:prueba1b.html');
}
?>
Por lo que es en este script donde realizo la autentificación del usuario

Saludos!

Última edición por donfalcone; 20/12/2007 a las 09:50 Razón: por despiste me deje una parte por escribir
  #25 (permalink)  
Antiguo 20/12/2007, 10:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Entonces en ese script quita la verificacion para ver si esta loggueado, es decir en ese script no pongas:
Código PHP:
if($_SESSION['loggedIn'] !== true ) {
      die(
"no estás autorizado" );

Saludos.
  #26 (permalink)  
Antiguo 20/12/2007, 10:33
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Ups, lo quite y sigue sin funcionar.
vuelvo a escribir aqui los scripts tal como están en estos momentos.

FORMULARIO
no ha sufrido cambios por lo que no lo escribo

SCRIPT DONDE AUTENTIFICO USUARIO
Código PHP:
<?php
session_start
();
$_SESSION['loggedIn']=true;

$_ENV[REQUEST_METHOD];
$nombre="Aitor";
$_SESSION['nombre']=$nombre;

$apellido="Tilla";
$_SESSION['apellido']=$apellido;

$edad="25";
$_SESSION['edad']=$edad;

$altura="180cm";
$_SESSION['altura']=$altura;

$nac="Spaniard";
$_SESSION['nacionalidad']=$nac;

if(
'aitortilla'==$_POST['usuario']){
header('Location:prueba1_1.php');
}else{
header('Location:prueba1b.html');
}
?>
PÁGINA SÓLO ACCESIBLE SI LOGIN EXITOSO
Código PHP:
<?php
session_start
();

if(
$_SESSION['loggedIn'] !== true ) {
      die(
"no estás autorizado" );
}
## a continuación conjunto de variables que se deseen imprimir
?>
Gracias por la ayuda
Saludos
  #27 (permalink)  
Antiguo 20/12/2007, 11:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Ahora que error te marca? A simple vista ya se ve bien.

Saludos.
  #28 (permalink)  
Antiguo 20/12/2007, 11:50
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Re: Tremendo lío de sesiones!!

supongo que sera por esta linea
if($_SESSION['loggedIn'] !== true )

o si existe el !== no seria !=
nunca lo habia visto, si esta bien disculpen por la ignorancia :P
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #29 (permalink)  
Antiguo 20/12/2007, 11:51
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: Tremendo lío de sesiones!!

Bueno, el error es que puedo entrar sin logearme a la página que sólo se debería ver estando logueado.
Cita:
PÁGINA SÓLO ACCESIBLE SI LOGIN EXITOSO
Código PHP:
<?php
session_start();

if($_SESSION['loggedIn'] !== true ) {
die("no estás autorizado" );
}
## a continuación conjunto de variables que se deseen imprimir
?>
Saludos!
  #30 (permalink)  
Antiguo 20/12/2007, 12:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Tremendo lío de sesiones!!

Recuerda que las sesiones permanecen activas mientras no cierres tu explorador web o borres las cookies, es por eso que puedes entrar porque ya pasaste por la pagina anterior.

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 11:20.