【问题标题】:Notice: Undefined index with PHP session注意:未定义的索引与 PHP 会话
【发布时间】:2016-06-07 20:32:13
【问题描述】:

我有我的 index.php 页面,用户可以在其中注册和登录会话。

这是我得到的错误:

注意:未定义索引:第 18 行 C:\wamp\www\CMS\admin\index.php 中的用户名。

我的代码有什么问题?

index.php 的短 sn-p:

源代码

<?php include "includes/admin_header.php" ?>

<div id="wrapper">

    <!-- Navigation -->
    <?php include "includes/admin_navigation.php" ?>

    <div id="page-wrapper">

        <div class="container-fluid">

            <!-- Page Heading -->
            <div class="row">
                <div class="col-lg-12">
                    <h1 class="page-header">
                        Welcome To Admin

                        <small><?php echo $_SESSION['username'] ?></small>
                    </h1>

                </div>
            </div>

这是我的 login.php

源代码

<?php include "db.php"; ?>
<?php session_start(); ?>

<?php

    if (isset($_POST['login'])) {

        $username = $_POST['username'];
        $password = $_POST['password'];

        // For login security
        $username = mysqli_real_escape_string($connection, $username);
        $password = mysqli_real_escape_string($connection, $password);

        $query = "SELECT * FROM users WHERE username = '{$username}' ";
        $select_user_query = mysqli_query($connection, $query);
        if(!$select_user_query){

            die("QUERY FAILED: " . mysqli_error($connection));
        }

        while($row = mysqli_fetch_array($select_user_query)) {

            $db_user_id = $row['user_id'];
            $db_username = $row['username'];
            $db_user_password = $row['user_password'];
            $db_user_firstname = $row['user_firstname'];
            $db_user_lastname = $row['user_lastname'];
            $db_user_role = $row['user_role'];
        }

        if ($username !== $db_username && $password !== $db_user_password) {

            header("Location: ../index.php");

        } else if($username === $db_username &&
                  $password === $db_user_password) {

            $_SESSION['username'] = $db_username;
            $_SESSION['firstname'] = $db_user_firstname;
            $_SESSION['lastname'] = $db_user_lastname;
            $_SESSION['user_role'] = $db_user_role;

            header("Location: ../admin");
        }
        else {
            header("Location: ../index.php");
        }
    }
?>

【问题讨论】:

  • 在回显if(isset($_SESSION['username'])){ echo $_SESSION['username']; }之前检查会话是否已设置
  • 是否调用了session_start()?索引真的存在吗?当你做var_dump($_SESSION)时你看到了什么?
  • 您是否在文件的开头调用了 session_start() ?
  • 检查会话是否已设置,如果已设置,则将其转储到屏幕并查看数组中的内容。然后您可以从那里开始调试。

标签: php session


【解决方案1】:

在 PHP 脚本的第一行,写下:

if (session_status !== PHP_SESSION_ACTIVE) {
    session_start();
}

出于调试目的,添加

var_dump($_SESSION);

if { } 块之后。您还必须确保会话存在于您要使用的每个文件中。为了简化这个过程,我给你一个简短的例子:

  1. 您创建一个 header.php 文件,将 if {} 块放在上面。
  2. 当您想在脚本中使用会话时,只需将该头文件包含在脚本的第一行即可。

    //header.php 如果(会话状态!== PHP_SESSION_ACTIVE){ session_start(); }

    //index.php 包括'header.php'; echo $_SESSION['用户名'];

    //登录.php 包括'header.php'; $_SESSION['username'] = 'John Doe';

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多