我已经创建了3个文件。
第一个是我的index.php文件,其中存储了我所有的HTML
// index.php file
<?php
session_start();
?>
<?php
if (!isset($_SESSION['u_id'])) {
header("Location: login.php");
exit();
}
?>
第二个是我在其中创建会话的登录文件(其中的一部分)
//login.php
$_SESSION['u_id'] = $row['user_id'];
$_SESSION['u_first'] = $row['user_first'];
$_SESSION['u_last'] = $row['user_last'];
$_SESSION['u_email'] = $row['user_email'];
$_SESSION['u_log'] = $row['user_login'];
header("Location: ../index.php?login=success");
exit();
最后一个是注销,我试图破坏会话
//logout.php
<?php
if (isset($_POST['submit'])) {
session_start();
session_unset();
session_destroy();
header("Location: ../login.php?logout");
exit();
}
所以接下来的问题是...从代码中可以看到,如果未设置section,我将检入我的index.php文件,以将用户重定向到login.php。成功登录并注销后,我尝试访问主页“ index.php”,我希望浏览器将我重定向到login.php,但没有发生,我在检查时看到的只是白屏,没有html代码,也有控制台中没有错误。
答案 0 :(得分:4)
这是因为您在 更改标题之前显示了一些内容。然后,标头已发送。和header(something)
无效。
// index.php file
<?php
session_start();
?>
<!-- there is a space below. -->
<?php
if (!isset($_SESSION['u_id'])) {
header("Location: login.php");
exit();
}
?>
将代码更改为
// index.php file
<?php
session_start(); // not closing php tag just below
if (!isset($_SESSION['u_id'])) {
header("Location: login.php");
exit();
}
?>
呈现页面时,服务器向浏览器发送HTTP消息。
(来自Wikipedia)
请求/响应消息包含以下内容:
- 请求行,例如GET /logo.gif HTTP / 1.1或状态行,例如HTTP / 1.1 200 OK,
- 标题
- 空行
- 可选的HTTP消息正文数据
如果在使用header();
之前发送了一些邮件正文数据(甚至是空格),则将已经发送了头。由于已经定义了HTTP消息,因此之后执行header()
将没有任何作用