登录页面无法正常工作

Posted

技术标签:

【中文标题】登录页面无法正常工作【英文标题】:Login page not functioning 【发布时间】:2016-03-23 12:02:46 【问题描述】:

当我第一次打开登录页面时,即使我使用了正确的用户名和密码,登录页面也不会被重定向到主页。但是在第二次登录时,它被正确地重定向到主页。 login.php 的代码如下所示。

<?php
session_start();
$_SESSION['login_user'] = false;
?>

login.php 的其余部分是简单的 html,并将登录表单数据发送到 validate.php 其中 validate.php 看起来像这样。

<?php
session_start();
    $username="";
    $password="";
    $usernameErr=""; 
    $passwordErr="";
    $empty=false;
    $_SESSION['login_user'] = false;
    if(isset($_POST['submit']))
    
        if(empty($_POST['username']))
        
            $empty=true;
            $usernameErr="Username is empty. Please try again";
        
        else 
            
                $username=$_POST['username'];
            
        if(empty($_POST['password']))
        
            $empty=true;
            $passwordErr="Password is empty. Please try again";
        
        else 
            
                $password=$_POST['password'];
            
        if(!$empty)
        
            $servername="myxor.in.mysql";
            $dbusername="myxor_in";
            $dbpassword="srikanth177";
            $dbname="myxor_in";
            $conn=new mysqli($servername, $dbusername, $dbpassword, $dbname);
            if($conn->connect_error) 
            
                die("Connection failed: " . $conn->connect_error);
            
            $sql = "SELECT firstname,package,username,password FROM users WHERE username='$username'";
            $result = $conn->query($sql);
            if (($result->num_rows) > 0) 
            
                $row = $result->fetch_assoc();
                if($username === $row['username']) 
                    
                        if($password === $row['password'])
                        
                            $_SESSION['fname'] = $row['firstname'];
                            $_SESSION['pack'] = $row['package'];
                            //$_SESSION['login_user'] = $username;
                            $_SESSION['login_user'] = true;
                            header('Location: http://www.myxor.in/home.php');
                            exit;
                        
                        else
                        
                            $passwordErr = "Invalid Password. Please Try Again";
                        
                    
             else
            
                $usernameErr = "Invalid Username. Please Try Again";
            
        
    
    else echo "submit not set";
    echo $usernameErr;
    echo "<br>";
    echo $passwordErr;
?>

关于第一次登录页面无法正常运行的任何建议(请注意,当我第二次登录时,它被正确重定向到所需的 home.php)

【问题讨论】:

可能是设置会话中存在一些问题。 PL。检查第二次进入该登录页面时是否启用会话? 首先你应该检查 $_SESSION['login_user'] 是否为真,如果是,然后将其重定向到 home.php 就在您将 $_SESSION['login_user'] 设置为 true 的位置上方,您应该回显一些内容作为测试,看看它是否真的达到了这一点。尝试类似:echo "Got to here #1"; 您还需要在重定向之前放置一个临时的exit;,否则您将看不到消息显示。如果您没有看到“Got to here #1”消息,请在脚本中的不同位置放置另一条消息,然后查看该消息是否出现。这是基本的错误测试,用于缩小脚本的哪些部分正在运行。如果您需要查看变量的内容,也可以回显这些内容。 【参考方案1】:

尝试使用下面的代码。

<?php
    session_start();
    $username="";
    $password="";
    $usernameErr=""; 
    $passwordErr="";
    $empty=false;
    $_SESSION['login_user'] = false;
    if(isset($_POST['submit']))
    
        if(empty($_POST['username']))
        
            $empty=true;
            $usernameErr="Username is empty. Please try again";
        
        else 
        
            $username=$_POST['username'];
        
        if(empty($_POST['password']))
        
            $empty=true;
            $passwordErr="Password is empty. Please try again";
        
        else 
        
            $password=$_POST['password'];
        
        if(!$empty)
        
            $servername="myxor.in.mysql";
            $dbusername="myxor_in";
            $dbpassword="srikanth177";
            $dbname="myxor_in";
            $conn=new mysqli($servername, $dbusername, $dbpassword, $dbname);
            if($conn->connect_error) 
            
                die("Connection failed: " . $conn->connect_error);
            
            $sql = "SELECT firstname,package,username,password FROM users WHERE username='$username'";
            $result = $conn->query($sql);
            if (($result->num_rows) > 0) 
            
                $row = $result->fetch_assoc();
                if($username == $row['username']) 
                    
                        if($password == $row['password'])
                        
                            $_SESSION['fname'] = $row['firstname'];
                            $_SESSION['pack'] = $row['package'];
                            //$_SESSION['login_user'] = $username;
                            $_SESSION['login_user'] = true;
                            header('Location: http://www.myxor.in/home.php');
                        
                        else
                        
                            $passwordErr = "Invalid Password. Please Try Again";
                        
                    
             else
            
                $usernameErr = "Invalid Username. Please Try Again";
            
        
    
    else echo "submit not set";
    echo $usernameErr;
    echo "<br>";
    echo $passwordErr;
?>

【讨论】:

【参考方案2】:

您应该在登录页面上打印会话变量。像这样的:

var_dump($_SESSION);

这样当您输入登录信息并且在第一次尝试时未重定向时,您将看到是否正在设置值。这是要采取的第一步。然后您将更好地了解您需要在文件中更改的内容。

【讨论】:

以上是关于登录页面无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 rails 4 认证的根路由进行设计无法正常工作

退出 Flutter 应用程序不会返回登录页面

Google+ 登录无法正常工作

由于侧边栏和导航栏,React 中的未找到页面无法正常工作

react和laravel中的登录身份验证无法正常工作

WebView 不显示 KOLIBRI 登录页面