如何使登录页面PHP与Session一起工作


How to make log in page PHP work with Session.

好的,所以我在这里有这个登录页面,我只想让它登录并发送给我"index.php"。我知道我的电子邮件是正确的,密码和一切都很好。这一切都很有效,只是停留在同一页上,而不是真正把我发送到"index.php"。我是php的新手,这可能是一些愚蠢的事情,但任何帮助都将不胜感激。请,谢谢!:(

<link rel="stylesheet" href="styles.css" />
<?php
session_start();
if(isset($_SESSION['usr_id'])!="") {
    header("Location: index.php");
}
include_once 'dbconnect.php';
//check if form is submitted
if (isset($_POST['login'])) {
    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);
    $result = mysqli_query($conn, "SELECT * FROM users WHERE email = '" . $email. "' and password = '" . md5($password) . "'");
    if ($row = mysqli_fetch_array($result)) {
        $_SESSION['usr_id'] = $row['id'];
        $_SESSION['usr_name'] = $row['name'];
        header("Location: index.php");
        $successmsg = "SWEET YOU'RE IN!";
        //echo "success";
    } else {
        $errormsg = "Incorrect Email or Password!!!";
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>PHP Login Script</title>
    <meta content="width=device-width, initial-scale=1.0" name="viewport" >
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
</head>
<body>
    <div class="container-fluid">
        <!-- add header -->
        <div class="navbar-header">
        </div>
        <!-- menu items -->
        <div class="collapse navbar-collapse" id="navbar1">
            <ul class="navbar">
                <li class="active"><a href="login.php">Login</a></li>
                <li><a href="register.php">Sign Up</a></li>
            </ul>
        </div>
    </div>
<div class="container">
    <div class="row">
        <div class="col-md-4 col-md-offset-4 well">
            <form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
                <fieldset>
                    <legend>Login</legend>
                    <div class="form-group">
                        <label for="name">Email</label>
                        <input type="text" name="email" placeholder="Your Email" required class="form-control" />
                    </div>
                    <div class="form-group">
                        <label for="name">Password</label>
                        <input type="password" name="password" placeholder="Your Password" required class="form-control" />
                    </div>
                    <div class="form-group">
                        <input type="submit" name="login" value="Login" class="btn btn-primary" />
                    </div>
                </fieldset>
            </form>
            <span class="text-danger"><?php if (isset($errormsg)) { echo $errormsg; } ?></span>
            <span class="text-success"><?php if (isset($successmsg)) { echo $successmsg; } ?></span>
        </div>
    </div>
</div>
</body>
</html>

这里有这个:

if(isset($_SESSION['usr_id'])!="") {

你想要这个:

if(isset($_SESSION['usr_id']) && $_SESSION['usr_id'] != "") {

请注意,$_SESSION['usr_id']中的内容将是数据库中的id列。从上下文中还不清楚是否存在这样的列,所以可能在初始重定向之前(即,在检查凭据之后(仔细检查是否真的存在值。

附带说明:不要使用MD5()来散列密码。MD5并不像您希望的密码哈希那样安全。