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

时间:2016-01-12 20:33:15

标签: php session

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

首先,我将表单中的值myusername和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']时才会加载,或者更确切地说,我已经"登录&#34 34。

<?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) { }

现在,我还有一个logout.php函数:

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

var_dump $_SESSION['myusername']仍显示NULLvar_dump $_SESSIONarray(0) { }. Which is expected; HOWEVER when I got to login_success.php , which should only load if $ _SESSION [&#39;名为myUsername&#39]。is set, it will still load; but the {var_dumps {1}} $ _ SESSION of the NULL`

所以,两个问题。设置会话令牌后,它们总是为空;在我的$ _SESSION array still show / unsetting之后,我仍然可以访问一个检查session_destory()是否已设置的网页。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

应该是:

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

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