Nan*_* HE 36 php cookies http httpresponse
我是PHP的新手,我刚刚练习PHP setcookie()并且失败了.
http:// localhost/test/index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
http:// localhost/test/view.php
<?php
// I plan to view the cookie value via view.php
echo $_COOKIE["TestCookie"];
?>
Run Code Online (Sandbox Code Playgroud)
但我没能运行index.php,这样的IE警告.
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test\index.php:9) in C:\xampp\htdocs\test\index.php on line 12
Run Code Online (Sandbox Code Playgroud)
毫无疑问,我启用了IE 6 cookie.
上面的程序有什么问题吗?谢谢.
使用WinXP OS和XAMPP 1.7.3.
ken*_*ytm 51
警告很清楚.
警告:无法修改标头信息 - 已在第12行的C:\ xampp\htdocs\test\index.php中发送的标头(输出从C:\ xampp\htdocs\test\index.php:9开始)
Cookie在HTTP响应标头中发送.由于HTML内容已经启动,因此您无法返回标题并添加Cookie.
setcookie()定义了一个与其他HTTP头一起发送的cookie.与其他标头一样,必须在脚本的任何输出之前发送cookie (这是协议限制).这要求您在任何输出之前调用此函数,包括
<html>和<head>标记以及任何空格.
setcookie在出现任何HTML之前移动该语句:
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
....
Run Code Online (Sandbox Code Playgroud)
Seb*_*olm 23
Cookie在HTTP页面传输的标头中发送.一旦输出了一些输出,就不能再修改它们了.
您遇到的问题在于您在尝试设置cookie之前输出了一些HTML文档.
有几种方法可以解决它; 其中一个是在输出页面上的任何内容之前设置cookie,就像这样
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
或者,您可以缓冲输出,以便在您明确告知之前不会写入任何内容
<?php
ob_start(); // Initiate the output buffer
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
</body>
</html>
<?php
ob_end_flush(); // Flush the output from the buffer
?>
Run Code Online (Sandbox Code Playgroud)
有关此最后一种方法的更多信息,请查看ob_start和ob_end_flush函数.
阅读有关setcookie的内容可能也很有用.
小智 9
或者转身
output_buffering = On
Run Code Online (Sandbox Code Playgroud)
在你的 php.ini
请参阅http://digitalpbk.com/php/warning-cannot-modify-header-information-headers-already-sent以获得完整的解决方案
您在设置cookie之前发送了一些HTML.必须在发送任何输出之前设置cookie,因为它随响应头一起发送.做这个:
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89981 次 |
| 最近记录: |