当输入有效的用户名和密码时,系统会创建一个赋值为 1 的 CONTROL 变量
。LOGIN.PHP:
<?php
require ('includes/config.php');
if (isset($_POST['user'])) {
$usuariodao = new UsuarioDAO();
$u = $usuariodao->login($_POST['user'], $_POST['password']);
if($u){
$_SESSION['USUARIO_ACTUAL'] = serialize($u);
$_SESSION['CONTROL'] = 1;
header("Location: index2.php");
exit;
} else {
$tpl = new Plantilla();
$tpl->assign('ErrorLogin', "Usuario y/o Clave incorrectos");
$tpl->display("login.tpl.php");
}
}
?>
索引2.PHP:
<?php
require ('includes/config.php');
if ($_SESSION['CONTROL'] !== 1) {
header("Location: index.php"); <-- EJECUTAR SI "CONTROL" no fue definido.
exit;
}
echo "EXITO";
//---- CODIGO QUE SE EJECUTARÁ
?>
如果密码和用户正确,它会显示“SUCCESS”并且栏显示:http://localhost/index2.php 但是如果我打开另一个窗口并复制 url,它仍然显示“SUCCESS”。它不进入执行INDEX.PHP。但是,如果我关闭浏览器并粘贴 URL http://localhost/index2.php,它会执行重定向到 index.php 的标头。问题是什么??
我可以看到,当登录成功已经完成时,您永远无法更改会话的值。
上面评估会话是否不是 null 或者它确定它是空的,你应该使用:
empty
eisset
。你也可以unset
用来销毁会话。为此,您必须修改:
关于 php 中会话的处理,有必要包含
session_start();
.检查您是否没有滥用标题功能。根据 PHP:
http://php.net/manual/es/function.header.php
检查您显示的第一件事是否是您的标题,如指示的文本所述,并且在它之前您没有输入任何内容,甚至没有在代码的任何部分输入最小空间,以便它显示在屏幕上。
另一方面,日志告诉您 CONTROL 常量已经在您的 login.php 文件中定义。如果它是相同的值,你不需要再次定义它,如果它是一个不同的值,你应该给它一个不同的名称。
你检查过 login.php 文件吗?
该线程也可能对您有所帮助:PHP 和 header(location: ) 函数
如果可能的话,尝试打开页面的时候检查一下页面的源代码,也许你可以看看在页眉之前有没有什么东西。
更新
我会检查您正在使用的文件所在的根文件夹中的 .htaccess 文件设置,尤其是 index2.php
我还会查看includes/config.php 文件
在某个地方,流进入了一个无法退出的循环。正如评论中所建议的那样,检查日志,如果您没有找到任何东西,请按照它们应该出现的顺序浏览文件中的代码。
由于错误消息建议清除 cookie,如果可能,我会尝试清除所有浏览器数据,或打开私人浏览器会话,这有时有助于调试可能存在的问题。