我的问题有点类似下面的帖子..警告:不能更改头信息 - 头已经发送(PHP)
PHP error: Cannot modify header information – headers already sent
但在我的情况下,我选择一次,我决定在那里开始的会话没有来自登录表单的验证错误,并且用户的登录信息与数据库的信息匹配。这是下面的代码:
登录页面(任何HTML之前)
session_name('username');
session_name('ip');
session_name('start');
session_start();
的login.php摘要(HTML的身体)
} else {
$user = $_POST['username'];
$userpass = md5($_POST['password']);
$login_results = statement("select username, password from `$admin` where username='$user' and password='$userpass'");
if (mysql_num_rows($login_results)!= 1) {
$errmsg = "<span id='error'>Login failed: Username or password not on file</span>";
}else {
$_SESSION['username'] = "$user";
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
header("Location: index.php");
}
}
}
}
如果你看的其他块
上面的代码我正在验证登录,如果它的好,我想分配会话变量并进入我的索引页面。其在一开始就这样的代码:
//Session Timeout Script -- used to determine the amount of time the user has been idle. If it the user has been idle for longer then the session time, log the user out.
//Secondary to the Timeout Script, the username and ip address is checked for validility and if either fails redirect the user to the login page.
session_cache_expire(20);
session_start();
$inactive = 1200;
if(isset($_SESSION['start'])) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
header("Location: logout.php");
}
}
$_SESSION['start'] = time();
$newip = $_SERVER['REMOTE_ADDR'];
if (!isset($_SESSION['username']) || empty($_SESSION['username']) || $newip!= $_SESSION['ip']) {
header('Location: login.php');
}
现在通过从以前的作者问题看书,有人提到,头()应该是在代码执行的第一件事,多数民众赞成在发送重定向,这在我的情况是login.php。这样做可以让我登录,但是当我注销时,我会销毁所有会话,并使用header()将我发回登录页面。这又会使登录页面重定向回到索引页面,因为它的第一行代码被读取。有没有办法避免这种情况?所以我不需要重复我已经在login.php顶部的一些代码逻辑?
安德烈
哦,还有一件事。据我记得你不能有多个调用header()函数。级联是不可能的。 – M2X 2010-11-13 17:42:20
确定再次读取错误,它声明输出已经发送到包含文件,我已经在我的header()执行之前。现在我去了那个文件,并删除了间距,现在它的工作感谢ALX M2X。 – Andre 2010-11-13 22:06:31
当然! ; - ]不要忘记将问题标记为可能会遇到此问题的其他人回答。 – M2X 2010-11-14 06:11:37