php会话无法在其他页面上工作

php会话无法在其他页面上工作,php,html,session-variables,Php,Html,Session Variables,我正在创建一个表单,人们需要登录以进行更新,登录和会话重定向工作正常。我已经尝试了数百种不同的书籍和论坛,似乎做了我想做的事情,而且看起来很简单。 这是上一页的代码 <?php include("setting.php"); $sql="SELECT * FROM $tbl_namem"; $result=mysql_query($sql); // username and password sent from form $myusername=$_POST['myusername']

我正在创建一个表单,人们需要登录以进行更新,登录和会话重定向工作正常。我已经尝试了数百种不同的书籍和论坛,似乎做了我想做的事情,而且看起来很简单。 这是上一页的代码

<?php
include("setting.php");

$sql="SELECT * FROM $tbl_namem";
$result=mysql_query($sql);

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

// To protect MySQL injection 
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_namem WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_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 "login_success.php"
session_start();
$_SESSION["myusername"];
$_SESSION["mypassword"];
header("location: login_success.php");
}
else {
echo "Wrong Username or Password Please Try Again";
}
?>

如果用户名和密码已经过验证,我想加载下两个页面。

在所有受密码保护的页面顶部尝试此操作:

session_start();
if(!isset($_SESSION["myusername"])){
 header("location: logout.php");
 die();
}
我必须告诉你你的会话变量,$_session[myusername];和$\u会话[mypassword]为空,请为它们指定so值,以便最终使用它们

创建一个页面注销,在其中显示注销消息,并添加:

session_start();
session_unset();
session_destroy();
这将破坏会话并注销用户

**使用mysqli,您正在使用的mysql函数将很快从PHP中删除

if(empty($_SESSION['myusername']['mypassword'])) { 
   header("Location: login.php");  
   die("Redirecting to login.php"); 
} 
$username = $_SESSION['myusername']['mypassword'];

请在下一页的顶部尝试此操作。

假设您的会话已正确启动,则以下几行确实会蹲起:

$_SESSION["myusername"];
$_SESSION["mypassword"];
您可能指的是一个旧的、过时的、不安全的、可怕的例子,它依赖于register_globals,它在几年前就被删除了,在那之前几年就被弃用了,而且从一开始就是一个可怕的想法

基本上,当您看到这样的情况时,变量只是神奇地从会话/get/post/cookie/etc数组中存储/检索,这意味着它是旧的、不安全的和错误的

您需要将这些变量实际分配给$\u会话数组,例如:

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

也就是说,session_start通常应该是您创建的每个页面的第一行(如果不是第一行的话)。该函数需要在后台设置一些HTTP头,如果您的代码在此之前碰巧生成了任何输出,它将无法这样做,并生成警告,您的会话将根本无法工作。

尝试放置会话\u start;在页面的顶部,而不是在下方。加上这个$_会话[myusername];另一个,如果他们没有被分配任何任务,对你没有任何好处。您可以尝试$_SESSION[myusername]=$_POST['myusername'];等等。我们可以看到下一页的代码吗?我还注意到,您正在以明文形式存储密码,这是一个明确的禁忌。与mysql_*函数(而不是带有预处理语句或PDO的mysqli_*函数)混合,将等于灾难。我还可以告诉您,您要么没有测试过,要么没有收到错误报告。我怎么知道?因为,你现在拥有的,将抛出一个错误,比如已经发送的头文件…-然而,有一个例外;我让你告诉我是什么。