Foros del Web » Programando para Internet » PHP »

Propagar Sesiones

Estas en el tema de Propagar Sesiones en el foro de PHP en Foros del Web. Buenas tengo un problema, quisiera propagar la sesion a todas las paginas que navega el usuario. En todas las paginas tengo un bloque que comprueba ...
  #1 (permalink)  
Antiguo 07/06/2010, 13:51
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Propagar Sesiones

Buenas tengo un problema, quisiera propagar la sesion a todas las paginas que navega el usuario.

En todas las paginas tengo un bloque que comprueba si esta iniciada la sesion, si esta inicia le doy la bienvenida cn un echo $_SESSION['usuario'] y sino esta inicia muestra un formulario que pide usuario y contraseña para iniciar sesion

El problema es que cuando inicio sesion en el index, me reconoce que esta inciada pero cuando paso a otra pagina no me la coje.

Código PHP:
<?php
    
/*compruebo si la sesion esta vacia, si esta llena le doy la bienvenida y 
    le ofrezco opciones de panel de usuario y cierre sesion. Si esta vacia le muestro un formulario
    de usuario y contraseña*/
    
if (isset($_SESSION['usuario']))
    {
        echo 
"<div class='sesionabierta'><P>Bienvenido ".$_SESSION['usuario']."</p>";
    echo 
"<a  class='enlace' href='#'> Panel de usuario</a><br>";
    
$conexion=mysql_connect("localhost""root""") or die('Fallo en la conexion');

    <?
php echo '<img src="images/shutdown.png"><a href="shutdown.php">Cerrar sesion</a></div>';}
    else{
?>
        <div class="sesion">
        <p>Inicio sesi&oacute;n</p>
        <div class="formulario">
<form action="sesion.php" method="post" class="formulario" enctype="multipart/form-data">
        
            <input type="text" value="Usuario" name="usuario" size="15"/><br />
            <input type="password" value="Contraseña" name="password" size="15"/><br /><br />
            <input type="submit" value="Inicio sesi&oacute;n" />
            
        </form>
la primera vez que entra al no estar iniciada la sesion pues te muestre le formulario directamente, la accion del formulario es esta

Código PHP:
$consulta="SELECT * FROM usuarios WHERE user='$usuario' AND pass='$password';";

$rs=mysql_query($consulta,$conexion);

if (
mysql_num_rows($rs)!=0){ 

       
//usuario y contraseña válidos 
       //defino una sesion y guardo datos 
    
session_cache_limiter('nocache,private');
    
session_name('usuario');
       
session_start(); 
    
$_SESSION['usuario']=$usuario;
       
session_register("autentificado"); 
       
$autentificado "SI"
       require_once(
'index.php');
        
}else { 
       
//si no existe le mando otra vez a la portada 
    
echo "<script type='text/javascript'>alert('Usuario o contrase\u00f1a incorrectos');</script>";
    require_once(
'index.php');
   

una vez valida los datos de usuairo y contrasela cn la bd inicia sesion y un monton de cosas mas: coje como variable el nombre del usuario, etc.

al final tiene un require_once que me carga el index de nuevo y asi el index vuelve a comprobar la sesion y esta vez si esta iniciada y me sale lo del panel de usuario.

El problema viene cuando me voy a otra pagina, y tengo el mismo if que en el index pero ya no me coje la sesion, este seria el codigo de la otra pagina


Código PHP:
if (isset($_SESSION['usuario']))
    {
        echo 
"<div class='sesionabierta' style='margin-bottom:50px;'><P>Bienvenido ".$_SESSION['usuario']."</p>";
    echo 
"<a href='panel.php'> Panel de usuario</a><br>";
    echo 
'<a href="shutdown.php">Cerrar sesion</a></div>';}
    else{
?>
    <div class="sesion">
        <p>Inicio sesi&oacute;n</p>
        <div class="formulario">
        <form action="sesion.php" method="post" class="formulario" enctype="multipart/form-data">
        
            <input type="text" value="Usuario" name="usuario" size="15"/><br />
            <input type="password" value="Contraseña" name="password" size="15"/><br /><br />
            <input type="submit" value="Inicio sesi&oacute;n" />
            
        </form> 
lo mismo que el index y aqui no me funciona.

what happend???
  #2 (permalink)  
Antiguo 07/06/2010, 15:03
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

El session_start() se ha de iniciar antes de cualquier salida del navegador (al principio de la página) en las páginas que desees crear una sesión o continuar dicha sesión.
__________________
Tu álbum de cromos online!!
  #3 (permalink)  
Antiguo 07/06/2010, 15:07
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

Antes de
session_cache_limiter('nocache,private');
session_name('usuario');

o que...

Haber lo que quiero es que el cliente siempre que navegue por mi pagina este identificado, y no se pierda la sesion
  #4 (permalink)  
Antiguo 07/06/2010, 15:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Propagar Sesiones

debe estar antes de todo, antes de cualquier lógica, antes de cualquier salida, ¿que entiendes por antes de todo?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/06/2010, 15:10
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

pero si esta antes que cualquier logica no me vale, porque solo quiero que se inicie cuando el usuario se identifica
  #6 (permalink)  
Antiguo 07/06/2010, 15:11
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

Cita:
Iniciado por davidmontiel Ver Mensaje
pero si esta antes que cualquier logica no me vale, porque solo quiero que se inicie cuando el usuario se identifica
Iníciala antes y si no se identifica la destruyes.
__________________
Tu álbum de cromos online!!
  #7 (permalink)  
Antiguo 07/06/2010, 15:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Propagar Sesiones

a ver, lo que tu no entiendes es lo siguiente...

creas la sesión, esta bien... no hay problema, ahora para recuperarla debes usar igualmente session_start() al comienzo de tus scripts donde desees recuperarla, ¿ahora si entiendes?

y si... debe estar antes de cualquier lógica, antes de que te cuestiones ¿ha iniciado sesión? ¡debes iniciarla!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 07/06/2010, 15:14
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

ok ok tranquilo paketetrueke, solo estoy un poco liado con mi proyecto no hay porque ponerse asi.

Pruebo eso
  #9 (permalink)  
Antiguo 07/06/2010, 15:17
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

Cita:
Iniciado por davidmontiel Ver Mensaje
ok ok tranquilo paketetrueke, solo estoy un poco liado con mi proyecto no hay porque ponerse asi.

Pruebo eso
Pero si lo que te ha dicho es exactamente lo que hay que hacer.
__________________
Tu álbum de cromos online!!
  #10 (permalink)  
Antiguo 07/06/2010, 15:20
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

ya ya, ya e iniciado sesion y si el usuario no se valida la destruyo, pero sigue sin funcionar

el metodo que utilizo para comprobarlo es valido? if (isset($_SESSION['usuario']))
  #11 (permalink)  
Antiguo 07/06/2010, 15:26
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

Cita:
Iniciado por davidmontiel Ver Mensaje
ya ya, ya e iniciado sesion y si el usuario no se valida la destruyo, pero sigue sin funcionar

el metodo que utilizo para comprobarlo es valido? if (isset($_SESSION['usuario']))
si, es valido
__________________
Tu álbum de cromos online!!
  #12 (permalink)  
Antiguo 07/06/2010, 15:33
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

vale, parece que ya se propaga, ahora el problema lo tengo en un enlance ke me dirije a un script que destruye la sesion, de modo que al pinchar en el hace esto:

Código PHP:
<?php

session_destroy
();
    
header ("Location: index.php");    

?>
me vuelve a mandar al index, pero como el index tien session_start al principio del todo pues forma un bucle y no cierra sesion, tenog que eliminarla manualmente desde la carpeta local.
  #13 (permalink)  
Antiguo 07/06/2010, 15:38
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

Cita:
Iniciado por davidmontiel Ver Mensaje
vale, parece que ya se propaga, ahora el problema lo tengo en un enlance ke me dirije a un script que destruye la sesion, de modo que al pinchar en el hace esto:

Código PHP:
<?php

session_destroy
();
    
header ("Location: index.php");    

?>
me vuelve a mandar al index, pero como el index tien session_start al principio del todo pues forma un bucle y no cierra sesion, tenog que eliminarla manualmente desde la carpeta local.
Pero hombre, como lo mandas otra vez a iniciar sesión, eso ya es un problema de planteamiento, piensalo un poco....
__________________
Tu álbum de cromos online!!
  #14 (permalink)  
Antiguo 07/06/2010, 15:41
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

Ya pero entonces no se adonde mandarlo, porque lo suyo seria el index...creo una pagina que se llame por ejemplo conecto.php y en ella lo uniko ke aya es el header ("Location: index.php"); y de ese modo ya a pasado por otra y no se crearia el bucle?
  #15 (permalink)  
Antiguo 07/06/2010, 15:47
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

Cita:
Iniciado por davidmontiel Ver Mensaje
Ya pero entonces no se adonde mandarlo, porque lo suyo seria el index...creo una pagina que se llame por ejemplo conecto.php y en ella lo uniko ke aya es el header ("Location: index.php"); y de ese modo ya a pasado por otra y no se crearia el bucle?

vale, mira si quieres puedes hacer esto:

en el index:

Código PHP:
session_start();
if (!isset(
$_SESSION['usuario']))
session_destroy(); 
__________________
Tu álbum de cromos online!!
  #16 (permalink)  
Antiguo 07/06/2010, 15:54
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

mmmmm nop...

quereis el php entero ave si es mas facil asi?
  #17 (permalink)  
Antiguo 07/06/2010, 15:58
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

Cita:
Iniciado por davidmontiel Ver Mensaje
mmmmm nop...

quereis el php entero ave si es mas facil asi?
Solo lo necesario de cada archivo.
__________________
Tu álbum de cromos online!!
  #18 (permalink)  
Antiguo 07/06/2010, 16:09
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

okei, mi pagina principal es el index, muestra noticias de una base de datos y un menu cn las otras paginas. tiene un div que al principio pone inicio de sesion y pide usuario y contraseña.

Este formulario se envia a sesion.php que comprueba la validacion y te devuelve al index con la sesion iniciada. En el index a cambiado el div inicio de sesion por el de panel de usuario ya que la sesion esta iniciada.

Una vez en este punto yo puedo navegar por todos las paginas sin salirme de la sesion, solo se sale cuando le de a un enlace que aparece debajo del panel de usuario.

Este enlace me manda a shutdown.php y luego me devuelve de nuevo al index.

A continuacion os pongo los trozos de php de cada fichero para comprenderlo

index.php

Código PHP:
<?php

session_start
(); 
if (!isset(
$_SESSION['usuario'])) 
session_destroy();

?>

CODIGO HTML

 <?php
    
/*compruebo si la sesion esta vacia, si esta llena le doy la bienvenida y 
    le ofrezco opciones de panel de usuario y cierre sesion. Si esta vacia le muestro un formulario
    de usuario y contraseña*/
    
if (isset($_SESSION['usuario']))
    {
        echo 
"<div class='sesionabierta'><P>Bienvenido ".$_SESSION['usuario']."</p>";
    echo 
"<a  class='enlace' href='#'> Panel de usuario</a><br>";
    
$conexion=mysql_connect("localhost""root""") or die('Fallo en la conexion');

mysql_select_db('BDmontiel',$conexion) or die('Problemas al realizar la conexion');


$consulta="SELECT * FROM usuarios WHERE user='$_SESSION[usuario]';";
$registros=mysql_query($consulta,$conexion) or die("No se han podido insertar los datos");

$registro=mysql_fetch_array($registros); ?>

CODIGO HTML

<?php echo '<img src="images/shutdown.png"><a href="shutdown.php">Cerrar sesion</a></div>';}
    else{ 
session_destroy();?>

CODIGO HTML

<?php ?>
sesion.php

Código PHP:
<?php
session_start
(); 

include(
'conexion.inc');

$conexion mysql_connect($servidor$usuario$pass);

mysql_select_db ('BDmontiel') or die("No conecta");

$usuario=$_REQUEST['usuario'];
$password=$_REQUEST['password'];


$consulta="SELECT * FROM usuarios WHERE user='$usuario' AND pass='$password';";

$rs=mysql_query($consulta,$conexion);

if (
mysql_num_rows($rs)!=0){ 
ob_start();
       
//usuario y contraseña válidos 
       //defino una sesion y guardo datos 
    
session_cache_limiter('nocache,private');
    
session_name('usuario');
    
$_SESSION['usuario']=$usuario;
       
session_register("autentificado"); 
       
$autentificado "SI"
       require_once(
'index.php');
    
ob_end_flush();    
}else { 
       
//si no existe le mando otra vez a la portada 
    
session_destroy();
    echo 
"<script type='text/javascript'>alert('Usuario o contrase\u00f1a incorrectos');</script>";
    require_once(
'index.php');
   



?>
personajes.php (esta es una pagina cualkiera dentro del menu que tiene el mismo div que el index.php)

Código PHP:
<?php
session_start
();

?>

CODIGO HTML

<?php
    
    
if (isset($_SESSION['usuario']))
    {
session_start();
        echo 
"<div class='sesionabierta'><P>Bienvenido ".$_SESSION['usuario']."</p>";
    echo 
"<a href='panel.php'> Panel de usuario</a><br>";
    echo 
'<a href="shutdown.php">Cerrar sesion</a></div>';}
    else{
?>

CODIGO HTML

<?php ?>
shutdown.php

Código PHP:
<?php

session_destroy
();
    require_once(
'index.php');    

?>
luego tengo mas paginas como personajes.php que tienen el mismo codigo php, solo cambia el html
  #19 (permalink)  
Antiguo 07/06/2010, 16:21
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

solo he mirado el index:

te lo comento sobre el código, se puede optimizar más pero me marcho a

prueba quitando las lineas que sobran.

Código PHP:
<?php
session_start
(); 
if (!isset(
$_SESSION['usuario'])) 
session_destroy();
?> 

CODIGO HTML

 <?php
    
/*compruebo si la sesion esta vacia, si esta llena le doy la bienvenida y 
    le ofrezco opciones de panel de usuario y cierre sesion. Si esta vacia le muestro un formulario
    de usuario y contraseña*/
    
if (isset($_SESSION['usuario']))
    {
        echo 
"<div class='sesionabierta'><P>Bienvenido ".$_SESSION['usuario']."</p>";
    echo 
"<a  class='enlace' href='#'> Panel de usuario</a><br>";
    
$conexion=mysql_connect("localhost""root""") or die('Fallo en la conexion');

mysql_select_db('BDmontiel',$conexion) or die('Problemas al realizar la conexion');


$consulta="SELECT * FROM usuarios WHERE user='$_SESSION[usuario]';";
$registros=mysql_query($consulta,$conexion) or die("No se han podido insertar los datos");

$registro=mysql_fetch_array($registros); ?>

CODIGO HTML

<?php echo '<img src="images/shutdown.png"><a href="shutdown.php">Cerrar sesion</a></div>';
}
    else{ 
session_destroy();//esta linea no es necesaría por que ya lo compruebas al principio.
?>
CODIGO HTML

<?php //esta llave sobra ?>
__________________
Tu álbum de cromos online!!
  #20 (permalink)  
Antiguo 08/06/2010, 05:03
 
Fecha de Ingreso: junio-2010
Mensajes: 17
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Propagar Sesiones

Ya he quitado las lineas que mas dicho.

La ultima llave habria que dejarla no? ya que es la que cierra al else...
  #21 (permalink)  
Antiguo 08/06/2010, 10:39
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Propagar Sesiones

Cita:
Iniciado por davidmontiel Ver Mensaje
Ya he quitado las lineas que mas dicho.

La ultima llave habria que dejarla no? ya que es la que cierra al else...
El index debería quedar asi:
Código PHP:
<?php
session_start
();//iniciamos sesión
if (!isset($_SESSION['usuario']))//comprobamos que no se ha registrado 
session_destroy();//destruimos la sesión por que no se ha registrado
else{//en caso contrario seguimos con la sesión
?> 

CODIGO HTML

<?php
    
echo "<div class='sesionabierta'><P>Bienvenido ".$_SESSION['usuario']."</p>";
    echo 
"<a  class='enlace' href='#'> Panel de usuario</a><br>";
    
$conexion=mysql_connect("localhost""root""") or die('Fallo en la conexion');

    
mysql_select_db('BDmontiel',$conexion) or die('Problemas al realizar la conexion');


    
$consulta="SELECT * FROM usuarios WHERE user='$_SESSION[usuario]';";
    
$registros=mysql_query($consulta,$conexion) or die("No se han podido insertar los datos");

    
$registro=mysql_fetch_array($registros); ?>

CODIGO HTML

    <?php echo '<img src="images/shutdown.png"><a href="shutdown.php">Cerrar sesion</a></div>';
}
?>

CODIGO HTML
__________________
Tu álbum de cromos online!!

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 13:51.