我正在登录页面,一切工作正常,但刷新安全页面或重定向到另一个页面变量消失。刷新/重定向后PHP会话变量丢失[解决]
登录:
<?php session_start();
//connection to database and other stuff
if ($user == $dbuser && $pass == $dbpass) {
$_SESSION['user'] = $user;
$_SESSION['authenticated'] = "yes";
$suser = $_SESSION['user']; //just to test if session works
}
?>
安全页面:
<?php session_start(); ?>
//small amount of html here
<?php
$suser = $_SESSION['user'];
$sauth = $_SESSION['authenticated'];
if ($sauth != 'yes') { //not completed yet (needs user name check)
echo "<a href='./'>Log in</a> first!";
require ('./login.php');
die;
} else {
//not so important code here
}
?>
//rest of html here
我没有发现任何错误,错误日志文件是干净的,所以必须是别的东西。重定向到保护页面后会话正常工作,但正如我前面所说的刷新页面或其他重定向清除会话变量。
页:http://nano.filiparag.com/admin/ 如果你想测试它只是要求用户名和密码
注:
现在我试着用setcookie()
这样做的,也没有工作再次
编辑:
问题出在注销按钮。我为它制作了单独的PHP文件,现在一切正常。
是否总是定义'$ dbuser'和'$ dbpass'?如果它们不是,那么'if'块将返回true,因为所有4个变量都可能是undefined/falsey。这会覆盖你的'$ _SESSION ['user']'和$ _SESSION ['authenticated']'值。 – jraede
@jraede不要担心db *,因为它们总是被定义的 - 从数据库中拾取。 –
你是正面的吗?从你的代码中,我可以看到唯一可以将这个人记录下来的代码。发布更多的代码可能会有所帮助,以及登录后如何将其重定向到安全页面的说明。 – jraede