今天刚开始学习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>