根据用户是否登录显示链接

时间:2014-09-29 08:37:04

标签: php session login

我正在进行PHP身份验证;我想确保用户是否已连接。如果用户未连接,则使用" login |注册"链接出现;否则该名称将显示在Logout链接旁边的首页上。这是我的代码:

<?php
session_start();
    if(!empty($_SESSION['niv'])){?>
    <ul class="acc_nav">
        <li><span class="user">Welcome <strong>Saad Berrada</strong></span>&nbsp;&nbsp;|</li>
        <li id="un-login"><a href="#"><span>Logout</span></a>
    </ul>
<?php }  else {
    ?>
    <ul class="acc_nav">
        <li><a href="#"><span>Login</span>&nbsp;&nbsp;|</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();
 }
}

3 个答案:

答案 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>&nbsp;&nbsp;|</li>
        <li id="un-login"><a href="#"><span>Logout</span></a>
    </ul>
<?php }  else {
    ?>
    <ul class="acc_nav">
        <li><a href="#"><span>Login</span>&nbsp;&nbsp;|</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>&nbsp;&nbsp;|</li>
            <li id="un-login"><a href="#"><span>Logout</span></a>
         </ul>
      <?php }  
      else {
      ?>
        <ul class="acc_nav">
           <li><a href="#"><span>Login</span>&nbsp;&nbsp;|</a></li>
           <li><a href="" data-reveal-id="myModal_197"><span>Sign up</span></a></li>
        </ul>
     <?php }?>
相关问题