大家好我在PHP登录表单上显示错误,当我将其上传到我的服务器时。它在我的本地主机上工作得很好,但是当我将它上传到服务器时它给了我这个错误:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/shopping/public_html/biblioteka/index.php:10) in /home/shopping/public_html/biblioteka/index.php on line 45
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/shopping/public_html/biblioteka/index.php:10) in /home/shopping/public_html/biblioteka/index.php on line 45
Warning: Cannot modify header information - headers already sent by (output started at /home/shopping/public_html/biblioteka/index.php:10) in /home/shopping/public_html/biblioteka/index.php on line 49
这是我的PHP代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="http://localhost/Shopping_biblioteka/css/style.css">
<title>Title</title>
</head>
<body align="center">
<div id="login">
<?php
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");
$result = mysql_query("SELECT password,id FROM x9qg6_users
where username='" . $username . "'");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);
$test = explode(":", $row[0]);
$user_id=$row[1];
$userhash = md5($password . $test[1]);
if ($test[0] === $userhash) {
session_start();
$_SESSION['login_user'] = $user_id;
$_SESSION['username'] = $username;
$url = "biblioteka.php";
header("Location: $url");
}
} else {
echo 'Внесете ги вашите податоци во полињата!';
}
// Connects to your Database
?>
<form action="" method="POST" accept-charset="UTF-8">
Корисничко име:<br/>
<input name="username" id="username" type="text"/><br/>
Лозинка:<br/>
<input type="password" id="password" name="password"/><br/>
<input type="submit" value="Логирај се!"/>
</form>
</div>
</body>
</html>
答案 0 :(得分:5)
只需在 session_start()
之后添加 ob_start()<?php
session_start();
ob_start();
?>
<!DOCTYPE html>
<html>
<head>
...
...
答案 1 :(得分:4)
是的,您的问题是您在发送了一些输出后尝试发送标头(通过调用* session_start *)。这可能是在你调用* session_start *之前发生的HTML /空格/错误消息等等。
在HTTP协议中,这些标题必须位于请求/响应正文之前,并且由于您无意中开始发送输出,因此您已经在正文中并且无法返回标题。
一种解决方案是始终确保在执行任何其他操作之前调用* session_start *。另一个选择是使用输出缓冲函数,如ob_start()来缓冲任何输出以防万一。
以防万一你想知道究竟发生了什么导致这里有一个简短的解释,说明session_start通常做什么...... PHP会话的正常行为是在你调用函数session_satrt()时做3件事/ p>
答案 2 :(得分:1)
在发送标题之前,您不得向页面输出任何内容
或使用输出缓冲
ob_start();
答案 3 :(得分:1)
请确保在session_start()
或header()
来电之前不发送任何内容(甚至不是空格):
<?php
...
session_start();
...
header();
...
?>
<!-- HTML code -->
可以在session_start
文档页面找到更多信息。
session_start
将在HTTP标头中发送信息(在发送任何真实内容之前发送到浏览器的一条信息)。如果您已将内容发送到浏览器,例如在你的情况下,相当一些HTML代码,服务器无法在标题中发送该信息:它们已经消失了。阅读HTTP protocol上的更多内容,以便更好地了解整个事情。
答案 4 :(得分:1)
将session_start();
移至文件顶部。
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
...
...