Я работаю над аутентификацией PHP; Я хочу убедиться, что пользователь подключен или нет. Если пользователь не подключен, появляется ссылка «войти | зарегистрироваться»; в противном случае имя будет отображаться на верхней странице рядом со ссылкой «Выйти». Вот мой код:
<?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();
}
}
Помните — вам нужно вызвать метод session_start () на странице обработки входа, иначе переменные сеанса фактически не будут созданы. Также попробуйте var_dump ($ _ SESSION) и сообщите нам, какой вывод вы получите.
<?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 of Session решит вашу проблему.
Я надеюсь, что это будет полезно для вас.
Самый гарантированный способ
<?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 }?>