我的問題有點類似下面的帖子..警告:不能更改頭信息 - 頭已經發送(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