我对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
数组,我会得到array(0) { }
。
现在,我还有一个logout.php函数:
<?php
session_start();
unset($_SESSION['myusername']);
$_SESSION = array();
session_destroy();
header("location:dashboard.php");
?>
var_dump
$_SESSION['myusername']
仍显示NULL
,var_dump
$_SESSION
为array(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()
是否已设置的网页。
有谁知道什么可能导致这种行为?
答案 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">