php - session 变量不起作用? (PHP)

标签 php mysql session

我有 2 个文件的问题:login_config.phpprofile.php

  • login_config.php 包含一个登录系统,它在完成多种形式的身份验证后将 $_SESSION['key'] 设置为真。
  • profile.php 是用户在成功后被重定向到的页面。

我希望 profile.php 上的数据只能通过设置 $_SESSION['key'] 访问(成功登录后)。

我的问题:我的代码有什么不正确的地方?此外,为什么我在登录提交时出现错误,该错误仅在 $_SESSION['key'] 为 false/未设置时才会返回,而不是目标 profile.php 页面?

代码:(login_config.php)

<?php

// POST VARIABLES
$submit = $_POST['login_submit'];
$username = $_POST['login_username'];
$password = $_POST['login_password'];
$email = $_POST['login_email'];

require 'password_config.php';

if(isset($submit)){

    require 'db/connect.php';

    // PASSWORD VERIFYING
    $pass_query = "SELECT password FROM users WHERE email='$email'";
    $queried = mysql_query($pass_query);
    while($row = mysql_fetch_array($queried)){
        $user_pass = $row['password'];
        $veri_password = password_verify($password, $user_pass);
    }
    if(!$veri_password === true){$errors[] = '-Account does not exist ';}

    // CHECKING NUM ROWS
    $sql = "SELECT id, username FROM users WHERE password='$user_pass' AND email='$email'";
    $entered_user = mysql_query($sql);
    $num_rows = mysql_num_rows($entered_user);


    // ERRS ARRAY ESTABLISHED
    $errors = array();

    // FURTHER VERIFYING
    if( empty($password) || empty($email) )
    {
        $errors[] = 'Please do not leave fields empty';
    }
    elseif( $num_rows != 1 )
    {
        $errors[] = '-Account does not exist ';
    }
    elseif( $num_rows == 1 )
    {
        session_start();
        $_SESSION['key'] === true;

        while($row = mysql_fetch_array($entered_user)){
            $_SESSION['id'] = $row['id'];
            $_SESSION['email'] = $email;
            $_SESSION['user'] = $row['username'];
            $_SESSION['pass'] = $password;
            header('Location: profile.php');
            exit();
        }

    }
}   

代码:(profile.php)

<?php

session_start();

if($_SESSION['key'] !== true){
    die ("please <a href='login.php'>log in</a> to view this page");
}
?>
<html>
<head>
    <title>Profile</title>
    <link href='css/main.css' rel='stylesheet' />
</head>
<body>
    <div id='container'>
        <?php require 'include/header.php'; ?>
        <?= 'NJM ID # ==>'.$_SESSION['id'].'<br />'.'Username ==>'.$_SESSION['user'].'<br/>'.'Password ==>'.$_SESSION['pass'].'<br/>'.'<br />' ?>
        <a href='logout.php'>Log out!</a>
        <br />
        -OR-
        <br />
        <p>Try our beta mode<a href='forum.php'> forum</a></p>
        <?php require 'include/footer.php'; ?>
    </div>
</body>
</html>

注意:我知道在当前代码状态下我很容易受到 SQL 攻击,我稍后会修复这个问题,而且我仍然坚持使用已弃用的 MySQL 版本。

最佳答案

profile.php 中,您必须在使用 $_SESSION 之前调用 session_start();session_start() 不仅会启动一个新 session ,还会继续现有 session (如果您愿意,它会“启动” session 处理功能)。如果不调用它,您将无法使用 $_SESSION

关于php - session 变量不起作用? (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31367464/

相关文章:

php - 在 PHP 中获取选定的选项值

php - 如何正确删除使用sonata-media-bundle上传的所有图像

javascript - 当选择 “radio buttons” 的一个选项时如何禁用其他选项?

MYSQL - DATE_SUB 和 INTERVAL

java - 使用 JPA 实体管理器时,我可能会从 Hibernate Session 中错过什么,反之亦然?

php - 使用 $_SESSION 获取所有值

javascript - 从 JSON 数组中提取 JSON 对象

mysql - bean 茎与数据库

MySQL SELECT 结合 3 SELECTs INTO 1

php - 使用mysqli和PHP从表中获取用户ID