Foros del Web » Programando para Internet » PHP »

problemas con manejos de sesiones

Estas en el tema de problemas con manejos de sesiones en el foro de PHP en Foros del Web. Buenas a todos.. estoy rabiando con el tema de las sesiones.. lo que no puedo hacer es guardar el nombre del usuario al logearse en ...
  #1 (permalink)  
Antiguo 14/04/2011, 10:32
 
Fecha de Ingreso: abril-2011
Mensajes: 22
Antigüedad: 13 años
Puntos: 0
problemas con manejos de sesiones

Buenas a todos.. estoy rabiando con el tema de las sesiones.. lo que no puedo hacer es guardar el nombre del usuario al logearse en una variable de sesion para despues poder usarlo en otro sector de la pagina.. el codigo que utilizo es el siguiente

Código PHP:
<?php

$servidor 
"localhost";
$usuario "root";
$password "";
$sdb "usuarios";

if (isset(
$_POST['username']) && isset($_POST['password'])) {

$ilink3=mysql_connect($servidor,$usuario,$password) or die(mysql_error());
mysql_select_db($sdb,$ilink3);

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT id,usuario,password FROM users WHERE usuario='".$_POST['username']."'") or die(mysql_error());

 
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 
if (mysql_num_rows($usuario_consulta) != 0) {
      if ((
$login == $usuario_consulta['usuario'])&&($password == $usuario_consulta['passwoord']))
     {
     
session_name($usuarios_sesion);
     
// incia sessiones
    
session_start();

    
// Paranoia: decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    
$_SESSION['usuario_id']=$usuario_consulta['id'];
    
  
    
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_login']=$usuario_consulta['usuario'];

    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_consulta['password'];


    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
  
    
header("location: perfil.php");

    exit;
    
   }else {  
   
// si no esta el nombre de usuario en la BD o el password ..
   // se devuelve a pagina q lo llamo con error
   
Header ("Location: login1.php");
   }
   
   }
 else {
 
Header ("Location: login1.php");

}
}


?>

luego en perfil. php tengo

Código PHP:
 <div id="contenido">
Usuario login (nombre) => <? echo $_SESSION['usuario_login'?><br>
  </div>
pero no consigo mostrar el valor del nombre del usuario.. espero me den una mano porque ya probe de todas formas y nada
  #2 (permalink)  
Antiguo 14/04/2011, 10:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con manejos de sesiones

¿inicias sesión también en la pagina donde quieres mostrarla?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 14/04/2011, 11:31
 
Fecha de Ingreso: abril-2011
Mensajes: 22
Antigüedad: 13 años
Puntos: 0
Respuesta: problemas con manejos de sesiones

no inicio sesion en login.php y de ahi voy a perfil.. ahi es donde quiero mostrarla
  #4 (permalink)  
Antiguo 14/04/2011, 11:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con manejos de sesiones

ese es el problema amigo, en la pagina donde quieres leer las variables de sesión debes usar también session_start() al inicio...

te sugiero leer el manual:
http://www.php.net/manual/es/book.session.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/04/2011, 14:25
 
Fecha de Ingreso: marzo-2011
Mensajes: 107
Antigüedad: 13 años
Puntos: 22
Respuesta: problemas con manejos de sesiones

Quizas este tema ayude

http://www.forosdelweb.com/f18/manejo-sesiones-que-hacer-904134/
  #6 (permalink)  
Antiguo 14/04/2011, 17:47
 
Fecha de Ingreso: abril-2011
Mensajes: 22
Antigüedad: 13 años
Puntos: 0
Respuesta: problemas con manejos de sesiones

me habia olvidado de colocarlo.. pero cuando acceso a perfil.php coloco al principio "session_start()" para poder leer el nombre de las variables.. pero evidentemente algo estoy haciendo mal.. porque de hecho si quiero mostrar en la misma pagina del login el nombre de usuario una vez que la persona ingreso sus datos correctamente tampoco me deja ver el valor.. es como si perdiera el valor de la variable.. o como si no pudiera cargarla correctamente.. alguna idea de que puede ser..


pd. ahi edito la parte del perfil.php
  #7 (permalink)  
Antiguo 14/04/2011, 18:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problemas con manejos de sesiones

session_start(); debe ser la primera linea de cada script donde quieras utilizar sesiones, ya sea para asignar los valores o simplemente leerlos.

En el script que colocaste al principio inicializas la sesion solo cuando el nombre de usuario es valido... esto es un error, porque la sesion debe estar activa independientemente de si el usuario ingreso correctamente o no.

Lo que debe marcar diferencia entre usuario "logueado" y visitante es que exista $_SESSION['usuario_login']; logicamente, al finalizar sesion debes eliminar esa variable, o usar session_destroy();
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 14/04/2011, 19:05
 
Fecha de Ingreso: abril-2011
Mensajes: 22
Antigüedad: 13 años
Puntos: 0
Respuesta: problemas con manejos de sesiones

Cita:
Iniciado por Triby Ver Mensaje
session_start(); debe ser la primera linea de cada script donde quieras utilizar sesiones, ya sea para asignar los valores o simplemente leerlos.

En el script que colocaste al principio inicializas la sesion solo cuando el nombre de usuario es valido... esto es un error, porque la sesion debe estar activa independientemente de si el usuario ingreso correctamente o no.

Lo que debe marcar diferencia entre usuario "logueado" y visitante es que exista $_SESSION['usuario_login']; logicamente, al finalizar sesion debes eliminar esa variable, o usar session_destroy();
entiendo lo que me decis.. pero haciendolo como vos me indicas tampoco logro rescatar el nombre del usuario.. soy nuevo en esto y la verdad no logro darme cuenta en donde esta mi error
  #9 (permalink)  
Antiguo 14/04/2011, 19:13
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problemas con manejos de sesiones

A ver... en el login:

Código PHP:
Ver original
  1. <?php
  2. if(isset($_SESSION['variable'])) {
  3.     die('Error, ya iniciaste sesion!!!');
  4. }
  5.  
  6. // Aqui sigues el proceso normal para verificar si es un ingreso valido y redirigir

En perfil.php:
Código PHP:
Ver original
  1. if(!isset($_SESSION['variable'])) {
  2.     die('Debes iniciar sesion!!!'); // Puedes redirigir al login
  3. }
  4.  
  5. // Para saber que es lo que tienes en sesion y como mostrarlo:
  6. var_dump($_SESSION);

Por cierto, despues de un header('Location: ...'); debes poner exit; para evitar que el script se siga procesando.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 15/04/2011, 08:35
 
Fecha de Ingreso: abril-2011
Mensajes: 22
Antigüedad: 13 años
Puntos: 0
Respuesta: problemas con manejos de sesiones

Cita:
Iniciado por Triby Ver Mensaje
A ver... en el login:

Código PHP:
Ver original
  1. <?php
  2. if(isset($_SESSION['variable'])) {
  3.     die('Error, ya iniciaste sesion!!!');
  4. }
  5.  
  6. // Aqui sigues el proceso normal para verificar si es un ingreso valido y redirigir

En perfil.php:
Código PHP:
Ver original
  1. if(!isset($_SESSION['variable'])) {
  2.     die('Debes iniciar sesion!!!'); // Puedes redirigir al login
  3. }
  4.  
  5. // Para saber que es lo que tienes en sesion y como mostrarlo:
  6. var_dump($_SESSION);

Por cierto, despues de un header('Location: ...'); debes poner exit; para evitar que el script se siga procesando.


muchas gracias por la ayuda.. lamentablemente hice lo que me indicaste pero sigue sin funcionar.. te muestro como tengo los codigos:

login.php

Código PHP:
<?php
session_start
();
if(isset(
$_SESSION['username'])) {
    die(
'Error, ya iniciaste sesion!!!');
    }
    
$servidor "localhost";
$usuario "root";
$password "";
$sdb "usuarios";


if (isset(
$_POST['username']) && isset($_POST['password'])) {
session_start();
$ilink3=mysql_connect($servidor,$usuario,$password) or die(mysql_error());
mysql_select_db($sdb,$ilink3);

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT id,usuario,password FROM users WHERE usuario='".$_POST['username']."'") or die(mysql_error());


 if (
mysql_num_rows($usuario_consulta) != 0) {
      if ((
$login == $usuario_consulta['usuario'])&&($password == $usuario_consulta['passwoord']))
     {
     
session_name($usuarios_sesion);
     
// incia sessiones
   
    // Paranoia: decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    
$_SESSION['usuario_id']=$usuario_consulta['id'];
    
  
    
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_login']=$usuario_consulta['usuario'];

    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_consulta['password'];


    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
  
    
header("location: perfil.php");

    exit;
    
   }else {  
   
// si no esta el nombre de usuario en la BD o el password ..
   // se devuelve a pagina q lo llamo con error
   
Header ("Location: login1.php");
    exit;
   }
   
   }
 else {
 
Header ("Location: login1.php");
 exit;

}
}



// y luego el codigo html con el formulario correspondiente

ahora en perfil.php tengo

Código PHP:
<?

session_start
();

if(!isset(
$_SESSION['variable'])) {

   die(
'Debes iniciar sesion!!!');
?>

//todo el codigo html... 

// y en un div hago lo siguiente:

 <div id="contenido">
Usuario login (nombre) =>  <? echo $_SESSION['usuario_login'?><br>
  </div>
espero haya sido claro y me puedas dar una mano mas.. gracias de antemano
  #11 (permalink)  
Antiguo 15/04/2011, 08:43
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: problemas con manejos de sesiones

Por que utilizas $_SESSION['username'] en una pagina y en la otra usas $_SESSION['variable'] ???

Eso no es lógico porque la session lleva una variable USERNAME para toda la session a no se que declares otra variable de session diferente en algún lado.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #12 (permalink)  
Antiguo 15/04/2011, 11:25
 
Fecha de Ingreso: abril-2011
Mensajes: 22
Antigüedad: 13 años
Puntos: 0
Respuesta: problemas con manejos de sesiones

Cita:
Iniciado por jotaincubus Ver Mensaje
Por que utilizas $_SESSION['username'] en una pagina y en la otra usas $_SESSION['variable'] ???

Eso no es lógico porque la session lleva una variable USERNAME para toda la session a no se que declares otra variable de session diferente en algún lado.
cuando lo copie lo copie mal.. en ambos codigos tengo puesto $_SESSION['username'] pero sigue sin funcionar
  #13 (permalink)  
Antiguo 15/04/2011, 16:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problemas con manejos de sesiones

Tu codigo... sorry por ponerlo como texto, solo quiero remarcar algunas cosas:

-----------------------
if (isset($_POST['username']) && isset($_POST['password'])) {
session_start();
$ilink3=mysql_connect($servidor,$usuario,$password ) or die(mysql_error());
mysql_select_db($sdb,$ilink3);

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT id,usuario,password FROM users WHERE usuario='".$_POST['username']."'") or die(mysql_error());


if (mysql_num_rows($usuario_consulta) != 0) {
if (($login == $usuario_consulta['usuario'])&&($password == $usuario_consulta['passwoord']))
{
session_name($usuarios_sesion);
// incia sessiones

// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');

// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.

// definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
$_SESSION['usuario_id']=$usuario_consulta['id'];
--------------------------------

1. Al inicio de la pagina ya tienes un session_start(), el marcado en rojo sale sobrando.
2. Si quieres definir un nombre especifico para las sesiones, debe ser antes de session_start().
3. Creo que lo mismo aplica para session_cache_limiter()... es decir, antes de session_start().

Resumen:
- Un solo session_start() por script y debe ser al principio.
- Si quieres aplicar modificadores, como nombre y/o especificaciones de cache, debes hacerlo antes de iniciar la sesion.
- Si usas nombre de sesion en login, debes usar exactamente el mismo en todos los otros scripts donde quieras tener acceso a las variables de sesion.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: sesiones
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 01:18.