cookie 是服务器在客户端写入的一些小文件,它存在于客户端的内存中或磁盘里。cookie 用来记录用户的个人信息,如何时访问过网站,从事过哪些活动,购物车内都有哪些商品等。这样一来,在用户下次再浏览该网站时,网站只需要查询 cookie 记录就会认得该用户了。
PHP 内置函数 setcookie() 可以用来写入 cookie,语法如下:
[Plain Text] 纯文本查看 复制代码 bool setcookie ( string $name[, string $value [, int $expire = 0 [, string $path [, string $domain[, bool $secure = false [, bool $httponly = false ]]]]]] )
第 1 个参数 $name 是用来设置 cookie 的名称,该参数不能省略,其余参数均可省略。
第 2 个参数 $value 用来设置 cookie 的值,如果该参数值为 "" ,那么表示删除 cookie 。
第 3 个参数 $expire 用来设置 cookie 的生命周期,如 time() + 60 * 60 * 24 * 30 表示 cookie的生命周期为从现在起的 30 天内。如果不设置该值,那么 cookie 就会存放在客户端内存,当浏览器终止时,cookie也会随之消失,不会写往客户端的磁盘里。
第 4 个参数 $path 用来设置 cookie 在客户端的存放路径。如 "/" 表示根目录,如果不设置该值,那么 WindowsVista/7 的用户可以在 %userprofile%/AppData/Roaming/Microsoft/Windows/Cookies文件夹下找到 cookie 。
第 5 个参数 $domain 用来设置能够访问 cookie 的域名。比如将其设置 www.groad.net 时,其它域名的网站就不能对该 cookie 访问。
第 6 个参数 $secure 用来设置是否由安全套接层协议层(SSL, HTTPS) 传送 cookie,默认为 FALSE,表示不经过安全套接层协议层传送 cookie 。
setcookie() 函数运行成功时返回 TRUE,失败时返回 FALSE。需要注意的是,不论返回值为何,都不意味着浏览用户是否接受 cookie 。
测试代码:
用 IE 浏览该页面,看到在 cookie 路径下生成了一个 cookie 记录文件:
打开后可以看到:
[Plain Text] 纯文本查看 复制代码 Fedora15-104
Linux
192.168.1.107/php/
1536
1845208960
30230865
1135422565
30230664
*
UserName
beyes
192.168.1.107/php/
1536
1845208960
30230865
1135437567
30230664
*
上面,
第 1 行 Fedora15-104 是该 cookie 的名字。
第 2 行 Linux 是 cookie 是该 cookie 的值。
第 3 行 192.168.1.107/php/ 表示是从该地址发来的 cookies 。
第 4 行 1536 是个标记值。
第 5 行 1845208960 是过期时间的地位(Windows FILETIME 时间结构)。
第 6 行 30230865 是过期时间的高位。
第 7 行 1135422565 是创建时间的低位。
第 8 行 30230664 是创建时间的高位。
第 9 行 * 符号是 cookie 记录分隔符,一个 cookie 文件可有多个记录结构。
对于上面所说的 FILETIME 时间,可用下面的程序来验证:
[C++] 纯文本查看 复制代码 // tmp.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "chs");
FILETIME ftLocal;
ftLocal.dwLowDateTime = 1135422565;
ftLocal.dwHighDateTime = 30230664;
SYSTEMTIME st;
FileTimeToSystemTime(&ftLocal, &st); //文件时间转为系统时间
_tprintf (TEXT("%4d年%2d月%2d日 %2d:%2d:%2d\n"), st.wYear, st.wMonth, st.wDay, st.wHour + 8, st.wMinute, st.wSecond);
return 0;
}
可以手动填入 ftLocal.dwLowDateTime 和 ftLocal.dwHighDateTime, 然后编译运行即可以看到时间信息。 |