2016-12-21 115 views
0

我使用了一個非常簡單的PHP腳本(login.php)讓用戶登錄到受保護的頁面。不過,我不斷收到這些錯誤消息會話啓動PHP錯誤消息無法發送會話緩存限制器 - 已發送頭文件

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/sites/f/mysite.co.uk/public_html/users/login.php:15) in /var/sites/f/mysite.co.uk/public_html/users/login.php on line 36 

Warning: Cannot modify header information - headers already sent by (output started at /var/sites/f/freedomprogramme.co.uk/public_html/users/login.php:15) in /var/sites/f/freedomprogramme.co.uk/public_html/users/login.php on line 39 

和頁面不會重定向到歡迎頁面,其中有這條線在頂部

<?php 
session_start(); 
if(!isset($_SESSION["sess_user"])){ 
header("Location: login.php"); 
} 
else 
{ 
?> 

這裏是login.php中

的內容
<!doctype html> 
<html> 
<head> 
<title>Login</title> 
</head> 
<body> 
<h1>Login</h1> 
<form action="" method="post"> 
<label>Username:</label><input type="text" name="user"><br/> 
<label>Password:</label><input type="password" name="pass"><br/> 
<input type="submit" value="Login" name="submit"><br/> 
<!--New user Register Link --> 
<p><a href="register.php">New User Registration!</a></p> 
</form> 
<?php 
if(isset($_POST["submit"])){ 
if(!empty($_POST['user']) && !empty($_POST['pass'])){ 
$user = $_POST['user']; 
$pass = $_POST['pass']; 
//DB Connection 
$conn = new mysqli('xxxx', 'yyyy', 'zzzz') or die(mysqli_error()); 
//Select DB From database 
$db = mysqli_select_db($conn, 'yyyy') or die("databse error"); 
//Selecting database 
$query = mysqli_query($conn, "SELECT * FROM userpass WHERE user='".$user." AND pass='".$pass."'"); 
$numrows = mysqli_num_rows($query); 
if($numrows !=0) 
{ 
while($row = mysqli_fetch_assoc($query)) 
{ 
$dbusername=$row['user']; 
$dbpassword=$row['pass']; 
} 
if($user == $dbusername && $pass == $dbpassword) 
{ 
session_start(); 
$_SESSION['sess_user']=$user; 
//Redirect Browser 
header("Location:welcome.php"); 
} 
} 
else 
{ 
echo "Invalid Username or Password!"; 
} 
} 
else 
{ 
echo "Required All fields!"; 
} 
} 
?> 
</body> 
</html> 

任何幫助表示讚賞。提前

+0

''session_start();''之前已經有了一些輸出。把這個'session_start();'放在你的PHP腳本的最頂端。 –

回答

1

感謝你需要移動

<?php if(isset($_POST["submit"])){ ... ... ... } ?>

在頁面的頂部,<!doctype html>之前。

原因是HTTP響應的標題必須始終位於主體之前。但在您的代碼中,正文(HTML)位於發送標頭的函數之前(session_start()header()

+0

包括'session_start();' –

+1

非常感謝 - 工作。 – Joel

+0

我以爲我不得不讓用戶在檢查匹配並將它們轉發到歡迎頁面之前輸入用戶名和密碼,但顯然不是!感謝您的幫助 – Joel

1

「標頭已發送」表示您的PHP腳本已經發送了HTTP標頭,因此無法進行修改給他們現在。

檢查您是否在致電session_start之前不發送任何內容。更好的是,只需要在你的PHP文件中做第一件事就是session_start(所以把它放在絕對的開始,在所有的HTML之前)。

+0

感謝您的幫助 – Joel

相關問題