如何删除无法完全发送会话cookie错误

时间:2013-07-04 08:18:06

标签: php session-cookies

我已经通过网络搜索了很多,但没有一个解决方案解决了我的问题......我仍然得到这个错误 警告: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();
 ?>

所以我该如何解决这个问题?有什么帮助吗?

3 个答案:

答案 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)以清除隐藏的字节顺序标记。一旦你确定了这个文本,最重要的工作就是追踪它的来源并修复它。