PHP: 使用会话变量时,登录页面未进入主页

PHP: Login page not leading into homepage when using session variable

我有一个登录页面(checklogin.php),它指向我网站的主页(index.php)成功登录。为了确保只能通过登录页面访问 index.php(以及网站中的每个页面),我使用了一个在 [= 开始时检查的会话变量21=]index.php如下:

<?php
session_start();
if( !isset($_SESSION['myusername']) )
header("location:checklogin.php"); 
?>

添加后,通过checklogin.php登录导致错误('wrong username, password' - 即使两者都被批准);当我删除 index.php 中的上述会话代码时,主页打开时没有错误。

下面是checklogin.php中的代码:

<?php

$host="localhost"; // Host name 
$username="garbo45"; // Mysql username 
$password="water5"; // Mysql password 
$db_name="garbo45"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select database.
$conn = new mysqli($host, $username, $password, $db_name);
if ($conn->connect_error) die($conn->connect_error);

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysqli_real_escape_string($conn, $myusername);
$mypassword = mysqli_real_escape_string($conn, $mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($conn, $sql);

// Mysql_num_row is counting table row
$count=mysqli_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "loginsuccess.php"
$_SESSION['myusername']= "myusername"; 
$_SESSION['mypassword']= "mypassword"; 
header("location:index.php");
}
else {
echo "Wrong Username or Password";
}
?>

为什么 index.php 中的会话代码块会在用户名和密码(我已验证在成员 table 中设置的用户名和密码)一旦通过时导致此错误会话检查被删除?如果能帮助理解和解决这个问题,我们将不胜感激。

checklogin.php 上缺少 session_start()

如果没有 session_start(),您的以下代码将无法运行:

$_SESSION['myusername']= "myusername"; 
$_SESSION['mypassword']= "mypassword";