如何解决Cannot modify header information...问题?

         今天刚开始学习cookie的有关知识,试着用了一下,出现了一大堆的问题,很是苦恼···

         浏览的页面上,老是出现这样一句警告:Warning : Cannot  modify  header  information  -  headers  already  sent  by···寻去各种解决方法,查找各种可能的原因,还是没有办法···急了····请教“大神”···

         后来在一位高人的指导下,终于改正确了····大笑

         现在,小小的总结一下解决这个问题的方法····

         造成这个问题,是setcookie语句出的问题···

         cookie本身在使用上就有一些限制,例如:

        1、呼叫setcookie的叙述,必须放在<html>标签的前面;

        2、呼叫setcookie之前,不能使用echo;

        3、直到网页被重新载入后,cookie才能在程式中出现;(也就是说,php cookie并不能在当前页面使用,必须先刷新,才能出现想要的效果。)

        4、setcookie函数必须在任何资料输出浏览器之前就先送出;

        ······

       因为这些限制,使得在执行“setcookie()”函数的时候,会出现“Undefined index”、“Cannot modify header information...” 等一些列问题,解决“Cannot modify header information...“的方法就是可以在程式的最前方加上"ob_start()",一般情况下,这样就可以解决问题。

       具体的函数格式:void ob_start(void)

       说明:当缓冲区激活时,所有来自php程序的非文件头信息都不会被发送,而是保存在内部缓冲区;为了输出缓冲区的内容,可以使用ob_end_flush()或者flush()输出缓冲区内容。

     另外,还可能需要这种方法解决······

         打开php.ini,然后把output_buffering设为on,然后重启appache,就好了。但是,值得注意的是:如果使用uft-8编码,就需要把uft-8中的bom去掉。。这是因为,uft-8中编码文件含有bom,而现在大多使用的php5并不支持bom....去掉bom,可以用Notepad++打开转换一下。

          下面,小晒一下我的一个登陆页面,在解决以上问题之后的代码:

                                 <?php
                                  if($_GET[out]){
                                         setcookie("cookie", "out");
                                            /*echo "<script language=\"javascript\">location.href='login.php';</script>";*/
                                     }
                                   if($_POST[id]=='admin'){
                                   $pw=md5($_POST[pw]);
                                   if($pw=='4e4d6c332b6fe62a63afe56171fd3725'){
                                      setcookie("cookie", "ok");
                                   /* echo "<script language=\"javascript\">location.href='login.php';</script>";*/
                             }
                              }
                       ?>
                          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                          <html xmlns="http://www.w3.org/1999/xhtml">
                             <head>
                         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                          <title>登陆</title>
                         </head>
                           <body>
                        <?php
                      //include("conn1.php");

                      include("head.php");
                     echo $_COOKIE['cookie'].'<br/>';
                         if($_COOKIE['cookie']!='ok'){
                            ?>
                         <script language="javascript">
                          function Checklogin()
                     {
                    if (bbs.id.value=="")
                    {
                    alert ("请填写登录名");
                     bbs.id.focus();
                        return false;
                         }
                       if (bbs.pw.value=="")
                    {
                       alert("密码不能为空");
                     bbs.pw.focus();
                     return false;
                      }
                    }
                 </script>
                <form action="" method="post" name="bbs" οnsubmit="return Checklogin();">
                   ID: <input type="text" name="id" /><br />
                 PW: <input type="password" name="pw" /><input type="submit" name="submit" value="登陆" />
              </form>
             <?
              }else{
                ?>
               <a href='?out=login'>退出</a>
                    <?
                     }
                      ?>
                </body>
                 </html>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值