登录系统在Localhost中工作,但不在Web服务器上工作

时间:2017-10-23 17:43:10

标签: php session mysqli login

if(isset($_POST["submit"]))
   {
$email = trim($_POST['email']);
$upass = trim($_POST['password']);

if($user_login->login($email,$upass))
{
    $user_login->redirect("index.php");
}
}

public function login($email,$upass)
{
    try
    {
        $stmt = $this->conn->prepare("SELECT * FROM table WHERE userEmail=:email_id");
        $stmt->execute(array(":email_id"=>$email));
        $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

        if($stmt->rowCount() == 1)
        {
            if($userRow['userStatus']=="Y")
            {
                if($userRow['userPass']==md5($upass))
                {
                    $_SESSION['userSession'] = $userRow['userID'];
                    return true;
                }
                else
                {
                    header("Location: login.php?error");
                    exit;
                }
            }
            else
            {
                header("Location: login.php?inactive");
                exit;
            }   
        }
        else
        {
            header("Location: login.php?error");
            exit;
        }       
    }
    catch(PDOException $ex)
    {
        echo $ex->getMessage();
    }

我已授予数据库的所有权限。 用户可以注册但是在登录时它没有登录但也没有显示任何错误并将用户指向index.php而不创建会话。

1 个答案:

答案 0 :(得分:0)

如果您还没有,我建议将以下代码行添加到需要基于会话的集成的所有相关页面的顶部。在此之后,您将能够设置会话变量。

session_start();

关于以前关于密码哈希方法的评论,与其他密码哈希方法相比,MD5被认为是非常不安全的,包括PHP的 password_hash() password_verify()功能。

<?php
$hashed_pass = password_hash($password, PASSWORD_BCRYPT);

if(password_verify($input_pass,$hashed_pass)) {
  //Password Matches DB
}
else {
  //Pass Doesn't Match DB
}
?>

我还看到您为错误消息使用了大量GET变量,例如错误非活动。我个人建议在登录表单本身上使用POST方法,并返回自身,并以这种方式处理错误消息,后端进程(如登录等)是从后端类处理的。

相关问题