1. PHP 的COOKIE
cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
PHP 在http 协议的头信息里发送cookie,因此 setcookie() 函数必须在其它信息被输出到浏览器
前调用,这和对 header() 函数的限制类似。
1.1 设置cookie:
可以用 setcookie()或 setrawcookie()函数来设置 cookie。也可以通过向客户端直接发送http 头来
设置。
1.1.1 使用 setcookie()函数设置cookie:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool
httponly]]]]]] )
name: cookie 变量名
value: cookie 变量的值
expire: 有效期结束的时间
path: 有效目录
domain: 有效域名,顶级域唯一
secure: 如果值为 1,则cookie 只能在https 连接上有效,如果为默认值 0,则http 和 https 都可
以。
例子:
代码片段
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value); /* 简单 cookie设置 */
setcookie("TestCookie", $value, time()+3600); /* 有效期 1个小时 */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/",
".example.com", 1); /* 有效目录 /~rasmus,有效域名 example.com及其所有子域名
*/
?>
设置多个 cookie 变量:setcookie('var[a]','value'); 用数组来表示变量,但他的下标不用引号。这
样就可以用$_COOKIE[‘var’][‘a’]来读取该COOKIE 变量。
1.1.2. 使用 header()设置cookie;
header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com[;...]]");
后面的参数和上面列出 setcookie 函数的参数一样。
比如:
代码片段
$value = 'something from somewhere';
header("Set-Cookie:name=$value");
1.2 Cookie 的读取:
直接用php 内置超级全局变量$_COOKIE 就可以读取浏览器端的cookie。
上面例子中设置了cookie "TestCookie",现在我们来读取:
代码片段
print $_COOKIE['TestCookie'];
COOKIE 是不是被输出了?!
1.3 删除cookie
只需把有效时间设为小于当前时间,和把值设置为空。例如:
代码片段
setcookie("name", "", time()-1);
用header()类似。
1.4 常见问题解决:
1) 用 setcookie()时有错误提示,可能是因为调用setcookie()前面有输出或空格。也可能你的文
档是从其他字符集转换过来,文档后面可能带有 BOM 签名(就是在文件内容添加一些隐藏
的BOM 字符)。解决的办法就是使你的文档不出现这种情况。还有通过使用ob_start()函数
也能处理一点。
2) $_COOKIE 受magic_quotes_gpc 影响,可能自动转义。
3) 使用的时候,有必要测试用户是否支持cookie。
1.5 cookie 工作机理:
有些学习者比较冲动,没心思把原理研究,所以我把它放后面。
a) 服务器通过随着响应发送一个http 的Set-Cookie 头,在客户机中设置一个cookie(多个cookie
要多个头)。
b) 客户端自动向服务器端发送一个http 的cookie 头,服务器接收读取。
HTTP/1.x 200 OK
X-Powered-By: PHP/5.2.1
Set-Cookie: TestCookie=something from somewhere; path=/
Expires: Thu, 19 Nov 2007 18:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/html
这一行实现了cookie 功能,收到这行后
Set-Cookie: TestCookie=something from somewhere; path=/
浏览器将在客户端的磁盘上创建一个cookie 文件,并在里面写入:
TestCookie=something from somewhere;
/
这一行就是我们用 setcookie('TestCookie','something from somewhere','/'); 的结果。也就是用
header('Set-Cookie: TestCookie=something from somewhere; path=/');的结果。