曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3464|回复: 0
打印 上一主题 下一主题

setcookie() -- 设置 cookie

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-6-12 14:01:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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, 然后编译运行即可以看到时间信息。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-7-10 07:13 , Processed in 0.084467 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表