我正在进行PHP身份验证;我想确保用户是否已连接。如果用户未连接,则使用" login |注册"链接出现;否则该名称将显示在Logout链接旁边的首页上。这是我的代码:
<?php
session_start();
if(!empty($_SESSION['niv'])){?>
<ul class="acc_nav">
<li><span class="user">Welcome <strong>Saad Berrada</strong></span> |</li>
<li id="un-login"><a href="#"><span>Logout</span></a>
</ul>
<?php } else {
?>
<ul class="acc_nav">
<li><a href="#"><span>Login</span> |</a></li>
<li><a href="" data-reveal-id="myModal_197"><span>Sign up</span></a></li>
</li>
</ul>
<?php }?>
即使我通过身份验证,也会出现登录/注册链接!
这里是身份验证片段
require_once 'Connexion.php';
$c = new Connexion();
$e = $_POST['email_ca'];
$p = md5($_POST['pass_ca']);
$c->query("select id_candidat from candidat where email='" .$e. "' and pass='" .$p. "'");
$rs = $c->single();
if($u = $rs){
session_start();
$_SESSION['niv'] = $u['niveau'];
header("location:home.php?$e");
} else {
ob_start();
echo 'Email or password is inccorect';
header("refresh: 2;location:login-signup.php");
ob_flush();
}
这是Connexion类
<?php
Class Connexion {
private $host = "localhost";
private $user = "root";
private $pass = "";
private $dbname = "cvtheque";
private $dbh;
private $stmt;
public function __construct() {
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace
try {
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch (PDOException $e) {
echo "Connexion Error: " . $e->getMessage();
}
}
public function query($query) {
$this->stmt = $this->dbh->prepare($query);
}
public function bind($param, $value, $type = null) {
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
public function execute() {
return $this->stmt->execute();
}
public function resultset() {
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
public function single() {
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}
public function rowCount() {
return $this->stmt->rowCount();
}
public function lastInsertId() {
return $this->dbh->lastInsertId();
}
public function beginTransaction() {
return $this->dbh->beginTransaction();
}
public function endTransaction() {
return $this->dbh->commit();
}
public function cancelTransaction() {
return $this->dbh->rollBack();
}
public function debugDumpParams() {
return $this->stmt->debugDumpParams();
}
}
答案 0 :(得分:0)
请记住 - 您需要在登录处理页面上调用session_start(),否则实际上不会创建会话变量。还可以尝试var_dump($ _ SESSION)并让我们知道你得到了什么输出。
答案 1 :(得分:0)
<?php
session_start();
if(isset($_SESSION['niv'])){?>
<ul class="acc_nav">
<li><span class="user">Welcome <strong>Saad Berrada</strong></span> |</li>
<li id="un-login"><a href="#"><span>Logout</span></a>
</ul>
<?php } else {
?>
<ul class="acc_nav">
<li><a href="#"><span>Login</span> |</a></li>
<li><a href="" data-reveal-id="myModal_197"><span>Sign up</span></a></li>
</li>
</ul>
<?php }?>
使用会话的Isset,将解决您的问题。
我希望这对你有所帮助。
答案 2 :(得分:0)
最保证的方式
<?php
@session_start();
if(isset($_SESSION['niv']) && $_SESSION['niv'] != ""){?>
<ul class="acc_nav">
<li><span class="user">Welcome <strong>Saad Berrada</strong>
</span> |</li>
<li id="un-login"><a href="#"><span>Logout</span></a>
</ul>
<?php }
else {
?>
<ul class="acc_nav">
<li><a href="#"><span>Login</span> |</a></li>
<li><a href="" data-reveal-id="myModal_197"><span>Sign up</span></a></li>
</ul>
<?php }?>