Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Al cambiar de pagina no mantiene la sesion

Estas en el tema de Al cambiar de pagina no mantiene la sesion en el foro de PHP en Foros del Web. Buenos días mi problema es que mi código cuando recargo la pagina mantiene la sesión pero cuando, por ejemplo, entro a X sitio y vuelvo ...
  #1 (permalink)  
Antiguo 15/07/2014, 07:31
Avatar de lmichailian  
Fecha de Ingreso: noviembre-2013
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Al cambiar de pagina no mantiene la sesion

Buenos días mi problema es que mi código cuando recargo la pagina mantiene la sesión pero cuando, por ejemplo, entro a X sitio y vuelvo a ingresar al mio no mantiene la sesión.

session_start() esta establecido en el index el cual requiere estos dos. Agradezco cualquier orientación saludos!

El codigo es el siguiente:

Código PHP:
<?php 
    

    
if (isset($_POST["user"]) && isset($_POST["password"]) ) {    
    
        
$user    checkLogin($_POST["user"], $_POST["password"]);

        if(
$user) {

        
$_SESSION["user"] = $user;
        }

    } else {

        
$user FALSE;
    }    
                        
?>

<header class="upper">
            <nav id="header-container">
                <ul>
                    <li><a href="index.php">Inicio</a></li>
                    <li><a title="Quien soy" class="upper" href="#">Quien soy</a></li>
                    <li><a title="Diseño Web" id="dropper" href="#">Dise&ntilde;o Web</a>
                        <ul class="drop-menu upper">
                             <li><a href="#">Consultoria</a></li>
                             <hr>
                             <li><a title="Proyectos" href="">Proyectos</a></li>
                         </ul>    
                    </li>
                    <li ><a title="Blog" class="upper" href="#">Blog</a></li>
                    <li ><a tittle="Contacto" class="upper" href="#">Contacto</a></li>
                </ul>
            
                <?php 
                        
echo "<div class='login'>";

                    if (
isLogin()) {
                        
                        echo 
"<h3>Bienvenido"." ".$user["user"]."!</h3>";
                        echo 
"<a href='".closeSession()."'><button class='danger-red'>Cerrar Sesion</button></a>";

                    } 

                    if (!
isLogin()) {
                        
                        echo 
"<button class='aqua-green login-btn'>Iniciar Sesi&oacute;n</button>
                              <a href='index.php?page=sign-up'><button class='orange'>Registrarme</button></a>"
;
                    }     
                    
                    if (
wrongData($user)) {
                        echo 
"<h3 style='position:absolute; color:red'><em>Datos invalidos</em></h3>";
                    }

                    echo 
"</div>";
                
?>
                <div class="rockerModal">
                    <?php
                        
require TEMPLATE_PATH.'form.html';
                    
?>
                  </div>
            </nav>    
</header>
ESTE CODIGO DEPENDE DE:

Código PHP:
<?php

    
function checkLogin($user,$password) {

        
$connect connect();

        
$password mysqli_real_escape_string($connect,$password);

        
$user       mysqli_real_escape_string($connect,$user);

        
$fields   "id,user,password,name,is_author,is_root";
        
        
$sql      "SELECT $fields FROM users WHERE user='$user' AND password='$password'";

        
$result   queryArray($sql);

        if (
$result) {
            return 
$result[0];
        }

        return 
FALSE;
    }

    function 
closeSession(){
        
session_destroy();
    }

    function 
isLogin(){

        if (isset(
$_SESSION["user"])) {
            return 
TRUE
        }    
            return 
FALSE;
     }

     
     function 
wrongData($user) {
         if (isset(
$_POST["user"]) && $user["user"] != $_POST["user"] && isset($user)) {
             return 
TRUE;
         }
         return 
FALSE;
    }
  #2 (permalink)  
Antiguo 15/07/2014, 10:43
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: Al cambiar de pagina no mantiene la sesion

Si este código se ejecuta cada vez que entras a tu página, supongo que es normal que no mantenga la sesión, si cada vez que entra trata de verificar el login a partir de los datos recibidos por post, la segunda vez que entras, los datos post ya no existen... o bien no entendí del todo el problema.
  #3 (permalink)  
Antiguo 15/07/2014, 12:22
Avatar de lmichailian  
Fecha de Ingreso: noviembre-2013
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

Cita:
Iniciado por ocp001a Ver Mensaje
Si este código se ejecuta cada vez que entras a tu página, supongo que es normal que no mantenga la sesión, si cada vez que entra trata de verificar el login a partir de los datos recibidos por post, la segunda vez que entras, los datos post ya no existen... o bien no entendí del todo el problema.
Gracias por tu respuesta, te cuento , yo lo no quiero es que no mantenga la sesión y no se me ocurre como solucionarlo. Lo ideal seria que mantenga la sesion hasta que se cierre :D, una pregunta session la ser global la primera vez no debería quedar saeteada ?
  #4 (permalink)  
Antiguo 15/07/2014, 12:30
 
Fecha de Ingreso: junio-2014
Mensajes: 14
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

yo también tuve el mismo error en un login que estuve creando. El problema radicaba en que para poder manipular en un include o una llamada una variable o matriz de session $_SESSION debes haber inicializado antes en el mismo script la session mediante session_start(), Por lo cual si eso que tienes ahi puesto son archivos distintos, te recomendaria usar en donde manipules las variables de session poner un session_start().

A mi me sucedia que aun habiendo colocado el session_start() en el index cuando incluia cualquier archivo con un include, o cuando usaba un php externo para validar un formulario me tiraba error por no llamarlo primero.

Prueba a ver si eso te ayuda..
  #5 (permalink)  
Antiguo 15/07/2014, 12:30
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: Al cambiar de pagina no mantiene la sesion

Cita:
Iniciado por lmichailian Ver Mensaje
session_start() esta establecido en el index el cual requiere estos dos. Agradezco cualquier orientación saludos!
session_start() debe de estar definido en todas las paginas donde quieras usar la sesion, si solo lo haces en el index solo habra sesion en el index
  #6 (permalink)  
Antiguo 15/07/2014, 12:59
Avatar de lmichailian  
Fecha de Ingreso: noviembre-2013
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

El tema es que el index.php incluye a el primer codigo que es header.php, si pongo session_start() en ambas paginas tengo un error de sesiones duplicadas...
  #7 (permalink)  
Antiguo 15/07/2014, 13:05
 
Fecha de Ingreso: junio-2014
Mensajes: 14
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

Hmmm pues no sé que te sale mal yo lo he hecho tal como te dije y me funciona. Y tengo como 3 o 4 includes en algunas de mis paginas y en cada una un session_start() y me funciona bien. Prueba lo siguiente, quita del header.php el session_start() y añadelo al comienzo de cada página así. Deberia funcionarte...

Código PHP:
Ver original
  1. <?php session_start() ?>
  #8 (permalink)  
Antiguo 15/07/2014, 13:10
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: Al cambiar de pagina no mantiene la sesion

A ver si te puedes explicar un poco mejor como haces todo el proceso y que estructura tienes.
Por que no termino de comprender tu problema.
  #9 (permalink)  
Antiguo 15/07/2014, 13:24
Avatar de lmichailian  
Fecha de Ingreso: noviembre-2013
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

Mi problema es que cuando inicio sesión OK recargo la pagina OK se mantiene. En header.php tengo un link a index.php para retornar al inicio de la pagina si hago click en el mismo la sesión ya no esta abierta.

En este caso session_start() solo se encuentra en index.php pero si lo pongo en header.php tambien sigue haciendo lo mismo pero dando los siguiente Notice: A session had already been started - ignoring session_start() in C:\xampp\htdocs\rocker\templates\header.php on line 5

index.php

Código PHP:
    <!-- Templates config -->
    <?php require 'config/templates.config.php'?>
    
    <!-- DB config & functions-->
    <?php require 'config/db.config.php'?>

    <?php require 'lib/db.funciones.php' ?>
    <?php require 'lib/article.funciones.php' ?>
    <?php require 'lib/user.funciones.php' ?>


    <!--Connect-->
    <?php    
    
    session_start
();
    
    
$connect connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);

    

    if (!
$connect) {
        echo 
"<h1 style='background:red;'>ERROR EN LA CONEXION CON LA BASE DE DATOS<h1>";
    }

    
//Template -> Load principal elements, if the user call a page,
    //              when this is ready load without *Home elements*     
    
    
require TEMPLATE_PATH.'/head.php'
    require 
TEMPLATE_PATH.'/header.php'

    if(isset(
$_GET["page"])) {

        require 
TEMPLATE_PATH."pages/".$_GET["page"].".html";

    } else {

        
//*Home elements*
        
require TEMPLATE_PATH.'/home.php';
          require 
TEMPLATE_PATH.'/articles.php';
          require 
TEMPLATE_PATH.'/aside.php';
    }

      require 
TEMPLATE_PATH.'/footer.php';

    
?>
header.php

Código PHP:
<?php  
     

    
if (isset($_POST["user"]) && isset($_POST["password"]) ) {     
     
        
$user    checkLogin($_POST["user"], $_POST["password"]); 

        if(
$user) { 

        
$_SESSION["user"] = $user
        } 

    } else { 

        
$user FALSE
    }     
                         
?> 

<header class="upper"> 
            <nav id="header-container"> 
                <ul> 
                    <li><a href="index.php">Inicio</a></li> 
                    <li><a title="Quien soy" class="upper" href="#">Quien soy</a></li> 
                    <li><a title="Diseño Web" id="dropper" href="#">Dise&ntilde;o Web</a> 
                        <ul class="drop-menu upper"> 
                             <li><a href="#">Consultoria</a></li> 
                             <hr> 
                             <li><a title="Proyectos" href="">Proyectos</a></li> 
                         </ul>     
                    </li> 
                    <li ><a title="Blog" class="upper" href="#">Blog</a></li> 
                    <li ><a tittle="Contacto" class="upper" href="#">Contacto</a></li> 
                </ul> 
             
                <?php  
                        
echo "<div class='login'>"

                    if (
isLogin()) { 
                         
                        echo 
"<h3>Bienvenido"." ".$user["user"]."!</h3>"
                        echo 
"<a href='".closeSession()."'><button class='danger-red'>Cerrar Sesion</button></a>"

                    }  

                    if (!
isLogin()) { 
                         
                        echo 
"<button class='aqua-green login-btn'>Iniciar Sesi&oacute;n</button> 
                              <a href='index.php?page=sign-up'><button class='orange'>Registrarme</button></a>"

                    }      
                     
                    if (
wrongData($user)) { 
                        echo 
"<h3 style='position:absolute; color:red'><em>Datos invalidos</em></h3>"
                    } 

                    echo 
"</div>"
                
?> 
                <div class="rockerModal"> 
                    <?php 
                        
require TEMPLATE_PATH.'form.html'
                    
?> 
                  </div> 
            </nav>     
</header>
user.funciones.php

Código PHP:
<?php 

    
function checkLogin($user,$password) { 

        
$connect connect(); 

        
$password mysqli_real_escape_string($connect,$password); 

        
$user       mysqli_real_escape_string($connect,$user); 

        
$fields   "id,user,password,name,is_author,is_root"
         
        
$sql      "SELECT $fields FROM users WHERE user='$user' AND password='$password'"

        
$result   queryArray($sql); 

        if (
$result) { 
            return 
$result[0]; 
        } 

        return 
FALSE
    } 

    function 
closeSession(){ 
        
session_destroy(); 
    } 

    function 
isLogin(){ 

        if (isset(
$_SESSION["user"])) { 
            return 
TRUE;  
        }     
            return 
FALSE
     } 

      
     function 
wrongData($user) { 
         if (isset(
$_POST["user"]) && $user["user"] != $_POST["user"] && isset($user)) { 
             return 
TRUE
         } 
         return 
FALSE
    }
  #10 (permalink)  
Antiguo 15/07/2014, 14:18
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: Al cambiar de pagina no mantiene la sesion

Si lo que quieres es que la sesión se mantenga, debes cumplir lo siguiente.

1. session_start() //debe estar al principio de tu archivo o archivos que requieran sesión.
2. verificar si una variable de sesión (bandera) está activa, si no, rediriges al login.
3. En el login, si el usuario es válido, creas o activas la bandera de sesión y rediriges a donde necesites.

Si tienes un header digamos header.php, es recomendable que hagas algo así:

index.php:
<?php
session_start();
include("header.php");
.
.
.
.
?>

login.php:
<?php
session_start();
include("header.php");
.
.
.
.
?>

otra_pagina.php
<?php
session_start();
include("header.php");
.
.
.
.
?>

De este modo en cada página abres sesión, y puedes llamar al header sin problemas.
  #11 (permalink)  
Antiguo 16/07/2014, 08:01
Avatar de lmichailian  
Fecha de Ingreso: noviembre-2013
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

Sigue igual... Es mas dejo un var_dump($_SESSION["user"]) en header.php y en index.php en index.php el resultado es NULL y en header.php depende si se inicio la sesión o no, pero cuando ingreso a inicio, osea index.php , se "limpia"... :(
  #12 (permalink)  
Antiguo 16/07/2014, 08:22
Avatar de lmichailian  
Fecha de Ingreso: noviembre-2013
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

Analizando el codigo entre en duda si el action es correcto index.php, en parte lo puse para que tome todos los includes y de ahi ejecute el script de header.php

Código HTML:
Ver original
  1. <form class="move login-form" action="index.php" method="post">
  2.     <div class="close">X</div>
  3.     <label for="usuario">Usuario:</label>
  4.     <input id="usuario" type="text" align="right" name="user" required><br>
  5.      <label for="pass">Password:</label>
  6.     <input align="right" id="pass" type="password" name="password" required><br>
  7.     <input type="submit" value="Ingresar">
  8. </form>
  #13 (permalink)  
Antiguo 23/07/2014, 07:20
Avatar de lmichailian  
Fecha de Ingreso: noviembre-2013
Mensajes: 20
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Al cambiar de pagina no mantiene la sesion

Lo solucione!!!! Les cuento como :

Código PHP:
Ver original
  1. if (isLogin()) {  
  2.                          
  3.                         echo "<h3>Bienvenido"." ".$user["user"]."!</h3>";  
  4.                         echo "<a href='".closeSession()."'><button class='danger-red'>Cerrar Sesion</button></a>";  
  5.  
  6.                     }


por

Código PHP:
Ver original
  1. if (isLogin()) {
  2.             echo "<h3>Bienvenido"." ".$_SESSION["user"]["user"]."!</h3>";
  3.  
  4.             if ($_SESSION["user"]["is_root"] == 1 || $_SESSION["user"]["is_author"] == 1) {
  5.                 echo "<a href='#'><button class='blue-curacao'>Administrar</button></a>";
  6.             }
  7.  
  8.             echo "<a href='index.php?close'><button class='danger-red'>Cerrar Sesion</button></a>";
  9.            
  10.             if (isset($_GET['close'])) {
  11.                
  12.                 closeSession();
  13.                 header("Location: index.php");
  14.             }
  15.  
  16.         }

Habia un conflicto con la variable de sesión y no tuve en cuenta que href=funcion(); se ejecuta al carga :D:D .

Saludos! gracias a todos!

Etiquetas: html, mysql, select, sql
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 07:38.