我已经通过网络搜索了很多,但没有一个解决方案解决了我的问题......我仍然得到这个错误 警告:session_start()[function.session-start]:无法发送会话cookie - 已经发送的标头(输出开始 这是我的代码
<?php
ob_start();
session_start();
$myusername = $_POST['username'];
$mypassword = $_POST['password'];
$myusername = stripslashes( $myusername );
$mypassword = stripslashes( $mypassword );
$myusername = mysql_real_escape_string( $myusername );
$mypassword = mysql_real_escape_string( $mypassword );
$mypassword = md5( $mypassword );
$con = mysql_connect("localhost", "root", "");
if( !$con ) {
die('Error connecting to server :'.mysql_error());
}
mysql_select_db("user_login",$con);
$result = mysql_query("SELECT username, password FROM user_info WHERE username='$myusername' && password='$mypassword'");
if( !mysql_fetch_array( $result, MYSQL_ASSOC ) ) {
//echo "<b><p>Wrong username or password.</p></b>";
//echo "<br /><a href='http://localhost/simic/option.php?page=login'>
Go back to login page </a>";
header('Location: option.php?page=attempt_to_login');
} else {
$_SESSION['access'] = 1;
$_SESSION['user'] = $_POST[username];
header('Location: option.php?page=online');
}
mysql_close( $con );
ob_flush();
?>
所以我该如何解决这个问题?有什么帮助吗?
答案 0 :(得分:1)
默认情况下,某些服务器会向生成的HTML添加内容,请确保不是这种情况(在浏览器中检查生成的源文件,看看是否有任何您不希望的内容)。
还尝试在PHP文件中删除BOM表头(如果它是UTF-8编码的)。这应该不是问题,但总是值得一试。
删除BOM表头对于每个编辑器都是不同的。对于Notepad ++,请转到编码菜单,并确保选中“在没有BOM的UTF-8中编码”。如果您使用的是Sublime Text 2,请点击文件&gt;使用编码保存&gt; UTF-8(不含带BOM的UTF-8)。
答案 1 :(得分:0)
您应该检查您的文件是否具有正确的编码。它应该是没有BOM的UTF-8。
答案 2 :(得分:0)
你的问题是你有某些东西“太早”向浏览器输出文字。从任何来源发送的文本的第一个字节将所有HTTP标头信息刷新到浏览器,并防止任何更多“标头”类型的操作(例如发送会话cookie)。有很多东西可以提前意外地向浏览器发送文本:在<?php
之前的空格,到屏幕的错误消息,文件中的UTF-8字节顺序标记,或者只是程序输出或HTML之外的订单(在cookie代码之前)。查看浏览器中的HTML页面源(View&gt; Page Source等),您可能会看到此文本。如果您的页面是UTF-8,请将浏览器切换为某些单字节编码(例如Latin-1)以清除隐藏的字节顺序标记。一旦你确定了这个文本,最重要的工作就是追踪它的来源并修复它。