说在前面
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
PHP 的COOKIE
- cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
- PHP在http 协议的头信息里发送cookie,因此 setcookie()函数必须在其它信息被输出到浏览器前调用,这和对header()函数的限制类似。
1.设置cookie:
a.可以用 setcookie()或 setrawcookie()函数来设置 cookie。也可以通过向客户端直接发送http头来设置。
eg:
$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 变量。
b. 使用 header()设置cookie;
header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com[;...]]");
eg:
$value = 'something from somewhere';
header("Set-Cookie:name=$value");
2.读取cookie:
直接用php 内置超级全局变量$_COOKIE 就可以读取浏览器端的cookie。
上面例子中设置了cookie "TestCookie",现在我们来读取:
eg:
print $_COOKIE['TestCookie'];
用header()类似。
note:
- etcookie()时有错误提示,可能是因为调用setcookie()前面有输出或空格。也可能你的文档是从其他字符集转 换过来,文档后面可能带有 BOM 签名(就是在文件内容添加一些隐藏的BOM 字符)。解决的办法就是使你的文档不出现这种情况。还有通过使用ob_start()函数 也能处理一点。
- _COOKIE 受magic_quotes_gpc 影响,可能自动转义
- 使用时必要测试用户是否支持cookie