2016-02-09 2 views
-1

Я получаю значение null $ _SESSION, когда я вызываю второй раз. В первый раз я получаю значение, но второй раз нет?

Что я делаю неправильно?

error

Код следующее:

<?php 
session_start(); 
require_once('inc/config.php'); 
if(!$user->is_loggedin()) 
{ 
    $user->redirect('index.php'); 
} 
$user_id = $_SESSION['user_session']; 
$query = $DB_con->prepare("SELECT * FROM users WHERE user_id=:user_id"); 
$query->execute(array(':user_id' => $user_id)); 
$userRow = $query->fetch(PDO::FETCH_ASSOC); 

?> 
<html> 
<head> 
<meta charset=utf-8" /> 
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css" /> 
<link rel="stylesheet" href="style.css" type="text/css" /> 
<title>BIENVENIDO - <?php print($userRow['user_name']); ?></title> 
</head> 

<body> 
    <header> 
     <nav class="navbar navbar-default navbar-static-top" role="navigation"> 
      <div class="navbar-header"> 
       <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex6-collapse"> 
        <span class="sr-only">Desplegar navegación</span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       <a class="navbar-brand" href="#">Olimpiadas FC</a> 
      </div> 
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
       <ul class="nav navbar-nav navbar-right"> 
        <?php if(isset($_SESSION['user_session'])){ ?> 
         <?php var_dump($_SESSION['user_session']); ?><!-- Here appear data a string "2" --> 
        <li><a href="<?php $user->logout() ?>">Salir</a></li> 
        <?php } else{ ?> 
        <li><a href="<?php $user->redirect('index.php') ?>">Entrar</a></li> 
        <?php } ?> 
       </ul> 
      </div> 
     </nav> 
    </header> 
    <div class="container"> 
     <?php var_dump($_SESSION['user_session']);die(); ?> <!-- Here appear null --> 
      aaaaaaaaaa 

    </div> 
</body> 
</html> 

Поручаю $ _SESSION в методе входа пользователя класс

//Estable el login del usuario 
    public function login($uname, $upass) 
    { 
     try 
     { 
      $query = $this->db->prepare("SELECT * FROM users WHERE user_name=:uname LIMIT 1"); 
      $query->execute(array(':uname'=>$uname)); 
      $userRow = $query->fetch(PDO::FETCH_ASSOC); 
      //Devuelve el numero de filas 
      if($query->rowCount() > 0) 
      { 
       //Convierto la pass a hash 
       $hash = password_hash($upass, PASSWORD_DEFAULT); 
       $query = $this->db->prepare("UPDATE users SET user_pass=:upass WHERE user_name=:uname"); 
       $query->bindParam(':uname',$uname); 
       $query->bindParam(':upass',$hash); 
       $query->execute(); 
       if(password_verify($upass, $userRow['user_pass'])) 
       { 
        $_SESSION['user_session'] = $userRow['user_id']; 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 

     } 
     catch (PDOException $e) 
     { 
      echo $e->getMessage(); 
     } 
    } 



#The user logout 

    public function logout() 
     { 
      session_destroy(); 
      unset($_SESSION['user_session']); 
      return true; 
     } 
+0

Второй звонок? Обновление страницы? Еще одна страница? –

+0

Во второй $ _SESSION – Miguel

+0

, где вы когда-либо присваиваете что-либо в $ _SESSION? Я вижу, что вы обращаетесь к нему, никогда не присваивая ему. –

ответ

0

Вы фактически вызова функции выхода из системы и перенаправляет вместо ссылки на страницу, которая вызывает их в строке 38 и 40. Таким образом, перед строкой 38 сеанс существует, после этой строки это не так.

Что я хотел бы предложить, и я не уверен, что это оптимальное решение, это создать страницу и вызвать ее logout.php, включить ваш файл конфигурации и вызвать функцию выхода из системы. затем измените ссылку так, чтобы она стала следующей:

<li><a href="logout.php">Salir</a></li> 

Надеюсь, что это поможет.

Смежные вопросы