第二次调用时,我得到值null $ _SESSION。我第一次获得价值,但第二次没有?
我做错了什么?
代码如下:
<?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)
您实际上正在调用函数logout并重定向而不是链接到在第38行和第40行调用它们的页面。因此,在第38行之前,会话存在,在该行之后,它不存在。
我建议,我不确定这是最佳解决方案,是创建一个页面并将其命名为logout.php,包含您的配置文件并从那里调用注销功能。然后更改链接,使其变为如下:
<li><a href="logout.php">Salir</a></li>
我希望有所帮助。