如何正确设置会话存储的用户名和cookie?

时间:2017-06-27 13:27:32

标签: php html oop

我正在创建一个网站或社交网站。问题是当我不使用cookie登录时,登录脚本成功回显会话存储的用户名,即echo $_SESSION['username'];,但是当我尝试使用会话和cookie登录时,它不会回显会话存储的用户名!图片:[https://i.stack.imgur.com/bgniz.png][1]

请帮帮我!我的代码是:

  

的index.php(主页)

<?php

class Redirect{

    public function redirectLogin(){
        session_start();
        if(isset($_SESSION['username']) || isset($_COOKIE['username'])){
            header('Location: logarea.php');
        }
    }
}

$red = new Redirect;
$red->redirectLogin();

?>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login Form</title>
    <script src = "jquery-3.2.1.js"></script>

</head>
<body>
    <form action = "login.php" method = "post" onSubmit = "">
        Username:<input type = "text" name = "username" id = "user" /><br /><br />
        Password:<input type = "password" name = "password" id = "pass "/><br /><br />
        <input type = "checkbox" name = "rememberme" id = "remember" />Remember Me<br /><br />
        <input type = "submit" name = "login" value = "Log In" id = "login" /><br /><br />
        <p id = "responsemsg"></p>
    </form>
</body>
</html>
  

login.php(登录流程)

<?php

class Validate{

    protected $DB_HOST = 'localhost';
    protected $DB_USER = 'root';
    protected $DB_PASS = '';
    protected $DB_NAME = 'logindb';

    public function connect(){
        ob_start();
        session_start();
        session_regenerate_id(true);


        global $conn;

        $conn = new mysqli($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME);
    }

    public function loginStatus(){
        global $conn;
        self::connect();

        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            if(isset($_POST['username'])){
                $username = $_POST['username'];
            }

            if(isset($_POST['password'])){
                $password = $_POST['password'];
            }

            if(isset($_POST['rememberme'])){
                $rememberme = $_POST['rememberme'];
            }

            if(!empty($username) && !empty($password)){

                $query = "SELECT `username`, `password` FROM `login` WHERE `username` = '$username' AND `password` = '$password'";
                $query_run = $conn->query($query);

                $user = null;
                $pass = null;

                while($quo = $query_run->fetch_array()){
                    $user = $quo['username'];
                    $pass = $quo['password'];
                }

                if($username == $user && $password == $pass){
                    if(!empty($rememberme)){
                        setcookie('username', $username, time()+(24*60*60));
                    }else{
                        $_SESSION['username'] = $username;
                    }   

                    header('Location: logarea.php');
                }else{
                    echo('Incorrect Username Or Password');
                }
            }else{
                echo('Please fill username and password');
            }
        }
    }
}

$validation = new Validate;
$validation->loginStatus();
  

用户日志区域(logarea.php)

<?php

session_start();

    if(isset($_SESSION['username']) || isset($_COOKIE['username'])){

        echo('You are now logged in, '. ucwords($_SESSION['username']));
        echo('<br />'.'<br />');
        echo('<a href = "logout.php">Log Out</a>');
    }else{
        header('Location: index.php');
    }
?>
  

退出(logout.php)

<?php

session_start(); 
session_destroy();

setcookie('username' ,'', time()-(24*60*60*60));

header('Location: index.php');

请帮帮我。

1 个答案:

答案 0 :(得分:0)

你有一个if else声明:

if(!empty($rememberme)){
   setcookie('username', $username, time()+(24*60*60));
}else{
   $_SESSION['username'] = $username;
}  

摆脱其他人。当然,您可以设置一个cookie来记住他们的用户名,但是无论如何都应该设置会话?