【发布时间】:2014-03-23 11:57:30
【问题描述】:
我正在制作登录页面,一切正常,但是在刷新安全页面或重定向到另一个页面变量时消失了。
登录:
<?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 个变量都可能是未定义/错误的。这将覆盖您的$_SESSION['user']和$_SESSION['authenticated']值。 -
@jraede 不要担心 db*,因为它们总是被定义的——从数据库中获取。
-
你确定吗?从您的代码中,我可以看到唯一可以将该人注销的内容。发布更多代码可能会有所帮助,以及在登录后如何将它们重定向到安全页面的说明。
-
@jraede 数据库连接是上面登录页面中 if 语句的代码。他们会收到消息“作为示例登录”和单击以进行重定向的链接。登录表单调用(操作)本身(同一个文件)。
-
检查会话 ID 是否正在改变。如果是你的浏览器中没有设置cookie。
标签: php session redirect login session-variables