没有返回值(或至少是正确的值)

时间:2017-01-07 01:13:58

标签: php

我对PHP很新,并且遇到了困难。当用户登录我的站点时,会生成会话ID并将其与过期时间,用户的电子邮件和IP一起存储在数据库中。会话ID也存储在用户的cookie中,并在30分钟不活动后过期。加载页面时,导航栏的一部分取决于它们是否已登录,这取决于是否设置了cookie。我的代码如下所示。

更改导航栏

body

中记录用户
<?php

if (isset($_COOKIE['sessionID'])) {
   echo "<li><a href=\"login\"><i class=\"material-icons\">account_circle</i></a></li>";
} else {
   echo "<li><a href=\"login\">Login</a></li>\n";
}

?>

我知道用户已登录,至少在一定程度上,因为$sql = "SELECT * FROM users WHERE `email`='$email'"; $query = mysqli_query($conn, $sql); if (password_verify($password, mysqli_fetch_assoc($query)['password'])) { $sessionID = uniqid('id_', true); $sql = "INSERT INTO sessions (`email`, `ID`, `expiration`, `ip`) VALUES ('$email', '$sessionID', '" . date("Y-m-d H:i:s", strtotime("+30 minutes")) . "', '" . $_SERVER['REMOTE_ADDR'] . "')"; setcookie("sessionID", $sessionID); $_COOKIE['sessionID'] = $sessionID; mysqli_query($conn, $sql); header("Location: https://[censor]/"); exit(); } else { header("Location: https://[censor]/login?success=false"); exit(); } 显示在数据库和我的cookie上。

更新

我开始使用PHP会话,在让他们上班一次之后,他们似乎已停止工作了。我的新代码如下。

中记录用户
sessionID

不,我没有忘记开始一个会话,它是在文件的最开头开始的。

实施例

$sql = "SELECT * FROM users WHERE `email`='$email'";
$query = mysqli_query($conn, $sql);

if (password_verify($password, mysqli_fetch_assoc($query)['password'])) {

  $_SESSION['email'] = $email;

  header("Location: https://[censor]/");

  echo $_SESSION['email'];

  exit();
} else {
  header("Location: https://[censor]/login?success=false");
  exit();

}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的错误。我不知道为什么这不起作用,但我解决了这个问题:

$val = true;
if(isset($_COOKIE['sessionID'])){
   $val = false;
}

if($val == true){
//action 1
}
else{
//action 2
}

我认为这也适用于你的情况。或者,如果你在没有使用的情况下使用它,那么它通常不起作用吗?

答案 1 :(得分:0)

如果您使用 SESSIONS 进行登录会更好;这是一个示例代码。我从登录表单中获取登录信息,将其分配给相应的变量并与我的数据库中的内容进行比较。

<?php session_start();
if (isset($_POST['submit'])) {
$username=$_POST['username'];
$password=$_POST['password'];

$username=validate_data($username);

$query="SELECT * FROM users;";
$result=mysqli_query($connection,$query);
comfirm_query($result);

  //fetching login info
while ($user=mysqli_fetch_assoc($result)) {
   //verifying info
    if($user['username']==$username){
      if (password_verify($password,$user['password'])) {
        /*if success set the session super global variable with indexes  
       user_id and username with the values gotten from the database*/
        $_SESSION['user_id']=$user['id'];
        $_SESSION['username']=$username;
        redirect_to("admin.php");
       }
       else{
        $_SESSION['login_message']="username or password not correct";
       }
    }
    else
        $_SESSION['login_message']="username or password not correct";
  }

}
?>

现在验证要求用户登录的任何页面上的登录

<?php
if(!isset($_SESSION['user_id'])){
    header("location:login.php");
    exit;
 }else{
 /*continue executing code on page; the else is not really 
 necessary as if the variable is not set, the user 
 will be redirected; but if it #is set , 
 the just skip (permit me to use this word) 
 the if and get on with the code*/
  }
?>