关于cookie有一点很重要,它必须在发送其他任何信息之前从服务器发送到客户端,也就是说,脚本应该在print语句之前,或者引入任何包含HTML的外部文件之前发送cookie,如果服务器尝试在web浏览器已经获得了HTML代码之后发生cookie,甚至空格,都会产生错误信息,cookie发送也将失败。可以参考 php学习笔记(十七)输出缓冲。
使用函数setcookie()函数发送cookie。如果成功,则该函数返回 true,否则返回 false。
setcookie(name,value,expire,path,domain,secure)
参数 | 描述 |
---|---|
name | 必需。规定 cookie 的名称。 |
value | 必需。规定 cookie 的值。 |
expire | 可选。规定 cookie 的有效期。 |
path | 可选。规定 cookie 的服务器路径。 |
domain | 可选。规定 cookie 的域名。 |
secure | 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。 |
注释:可以通过 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 来访问名为 "user" 的 cookie 的值。
注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。如果你不需要这样,可以使用setrawcookie() 代替。
例子:
发送一个简单的cookie:
<pre name="code" class="php"><?php
$value = "my cookie value";
// 发送一个简单的 cookie
setcookie("TestCookie",$value);
?>
检索 cookie 值:
<pre name="code" class="php"><html>
<body>
<?php
// 输出个别的 cookie
echo $_COOKIE["TestCookie"];
echo "<br />";
echo $HTTP_COOKIE_VARS["TestCookie"];
echo "<br />";
// 输出所有 cookie
print_r($_COOKIE);
?>
</body>
</html>
输出:
my cookie value my cookie value Array ([TestCookie] => my cookie value)发送一个24小时过期的cookie:
<pre name="code" class="php"><?php
$value = "my cookie value";
// 发送一个 24 小时候过期的 cookie
setcookie("TestCookie",$value, time()+3600*24);
?>
创建一个数组 cookie:
<pre name="code" class="php"><?php
setcookie("cookie[three]","cookiethree");
setcookie("cookie[two]","cookietwo");
setcookie("cookie[one]","cookieone");
// 输出 cookie (在重载页面后)
if (isset($_COOKIE["cookie"]))
{
foreach ($_COOKIE["cookie"] as $name => $value)
{
echo "$name : $value <br />";
}
}
?>
输出:
three : cookiethree two : cookietwo one : cookieone