我正在处理的项目存在问题。我正在尝试使用PHP + Sessions编写一个简单的登录系统。但我失去了我的会话,我不知道为什么,代码:
的index.php
<?php
session_start();
if(!isset($_SESSION['logedin'] == True)){
<form action = "login.php" method = "post" id="login-form" class = "login-form">
<input type = "text" name = "username" maxlength = "100"/>
<input type = "password" maxlength = "50" name = "password"/>
<button type="submit">Sign in</button>
</form>
}else{
echo "Loged in.";
}
?>
的login.php
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if(!isset($_SESSION['logedin'] == True)){
if($username == 'username' && $password == 'password'){
$_SESSION['logedin'] = True;
header("index.php"); // Loged in
}
}
?>
真正的代码不是这个,因为它放在这里太长了,但这是关于代码的简单简历......我正在失去理智,因为如果我打开一个会话到index.php,它工作,但如果我离开我的页面(在这种情况下,通过表单login.php),当我回到索引,会话只是消失......
我得说我不使用任何框架或其他东西,它只是一个简单的表单,都是用PHP完成的。
答案 0 :(得分:2)
第一行的问题将是一个问题:
if(!isset($_SESSION['logedin'] == True)){
更改为:
if(!isset($_SESSION['logedin'])) {
为什么你在这种情况下做双重否定?而不是!isset == true
,而是isset == false
。这可能会给代码增加混乱,代码越直观(也越简单)就越好。
在你的login.php中你也有这一行:
if(!isset($_SESSION['logedin'] == True)){
你基本上说isset(true) == false
应该总是返回false。因为$_SESSION['logedin'] == true
是真的。将其更改为if (isset($_SESSION['logedin']))
,如果您已登录,则为真。
让我们进一步打破这种状况,看看你在做什么
if (false == isset(
$_SESSION['loged'] == true // will be true if you're logged in
) // isset will return true, but you're expecting a false
)
你的确定总是会回归真实。 $ _SESSION ['logedin'] == true是返回true还是false,它将是“isset”。如果返回值为null或var不存在,则Isset将仅返回false。 “假”是一个值并且存在。那有意义吗?对不起,如果这令人困惑。基本上,不要在你的isset中使用条件! :)。将isset用作条件的一部分,但不要将它们传递给isset参数。