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

标签 php mysql session authentication

好的,所以我这里有这个登录页面,我想要它做的就是让我登录并也向我发送“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 并不像您希望的密码哈希那样安全。

关于php - 如何使登录页面 PHP 与 Session 一起工作。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38770514/

相关文章:

php - 搜索 MySQL 数据

php - 如何检查 var 是否存在于数据库列中,如果不存在则不执行任何操作

mysql - 设置后外键可以为主键吗?

jsp - session 无法解析为通过 jsp 发送邮件的类型

ruby-on-rails - 存储在 Rails session 中的对象变成字符串?

php - 设置值(如果它们尚不存在)

php - 如何将用户输入与散列密码进行比较

PHP - 访问不区分大小写的对象属性?

mysql - 查询中 `INNER JOIN`过滤条件的位置; `ON` 或 `WHERE` 子句

python - Flask 按时间限制用户 session