当我第二次打电话时,我失去了$ _SESSION的价值

时间:2016-02-09 15:27:20

标签: php

第二次调用时,我得到值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;
        }

1 个答案:

答案 0 :(得分:0)

您实际上正在调用函数logout并重定向而不是链接到在第38行和第40行调用它们的页面。因此,在第38行之前,会话存在,在该行之后,它不存在。

我建议,我不确定这是最佳解决方案,是创建一个页面并将其命名为logout.php,包含您的配置文件并从那里调用注销功能。然后更改链接,使其变为如下:

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

我希望有所帮助。