在应用程序的每个页面上,我检查用户是否登录。我最近意识到我的脚本结构不好,并做了一些更改。我想知道如果这种新方法实现了操作的对于未登录用户以正确的顺序。PHP用户登录失败处理
<?php
ob_start();
session_start();
if ($_SESSION['loggedin'] !== true) {
$_SESSION['messages'][] = '<li>User Not Logged In</li>';
session_write_close();
ob_end_clean();
header('Location: login.php');
exit;
}
else {
// execute page
}
?>
在此之前剧本,ob_start()
呼叫低于登录检查部分,因此是导致重定向给出问题那session_start()
产生它自己的标题。
我也很想知道该脚本是否为登录检查提供足够的安全性。
除非脚本在重定向前向浏览器输出内容,否则不应在顶部需要'ob_start();'。您是否将这个脚本包含在页面中,并且在调用此脚本之前,包含脚本是否将输出发送到浏览器? – jeroen
@jeroen'session_start()'默认输出到浏览器,所以AFAIK我需要'ob_start()'来确保执行'header()'调用。除了会议这个脚本在一开始。 [会话输出和重定向的说明](http://stackoverflow.com/questions/8028957/headers-already-sent-by-php/8028987#8028987) – foochow
不,如果头已经发送,则无法启动会话。这并不意味着'session_start'正在发送标题。 – jeroen