PHP $_SESSION 未清除,也未设置.始终返回 NULL


PHP $_SESSION is not cleared, nor is it set. Always returns NULL

我对PHP比较陌生,所以我意识到这很可能是初学者的错误;但是我已经做了尽职调查,并试图自己解决问题,但没有运气。

首先,我将表单中的值myusert和mypassword传递给checklogin.php。 从那里它查询数据库,如果返回用户名和密码匹配的单行,则运行以下代码:

$_SESSION['myusername']=$myusername;
$_SESSION['mypassword']=$mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
?>

现在,我知道编写自己的登录机制是不受欢迎的 - 特别是因为我的甚至不起作用。 我理解这一点;但在这一点上,让它工作对我自己来说更像是一种学习体验,而不是实际应用。

从这里我被定向到这个页面(login_success.php(,只有在设置了$_SESSION['myusername']或更确切地说,我已"登录"时,它才应该加载。

<?php
session_start();
var_dump($_SESSION);
if(!isset($_SESSION['myusername'])){
header("location:login.php");
}
var_dump($_SESSION['myusername']);
var_dump($_SESSION['mypassword']);
?>
<html>
<body>
Login Successful
</body>
</html>

现在,登录后,var_dumps输出NULL。 如果我拉动整个$_SESSION‍数组,我会得到arra‍y(0) { }.

现在,我还有一个注销.php功能:

<?php
session_start();
unset($_SESSION['myusername']);
$_SESSION = array();
session_destroy();
header("location:dashboard.php");
?>

$_SESSION['myusername']var_dump仍然显示NULL$_SESSIONvar_dump array(0) { }. Which is expected; HOWEVER when I got to login_success.php , which should only load if $_SESSION['myusername'] is set, it will still load; but the var_dumps of the $_SESSION array still show NULL'。

所以,有两个问题。 设置我的会话令牌后,它们始终为空;在unsetting/session_destory()我的 _SESSION 美元后,我仍然可以访问一个检查是否设置$_SESSION['myusername']的页面。

有谁知道什么会导致这种行为?

确保在

处理$_SESSION变量的每个 PHP 文件中都有session_start();。确保将其包含在 PHP 文件的顶部。

另外,您是否使用方法POST提交表格? 您发布的变量存储在 $_POST 数组中,因此:

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

应该是:

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

每当通过表单提交密码时,请确保将表单属性方法设置为发布,如下所示:<form method="post">