cookie存放在客户端浏览器中,session保存在服务器上。

setcookie函数生成一个cookie,系统经处理把这个cookie发送到客户端并保存在客户端目录下。cookie是HTTP标头的一部分,因此setcookie函数必须在任何内容送到浏览器之前调用,这种限制与header()函数一样。当客户再次访问该网站时,浏览器会自动把客户端目录下与该站点对应的cookie发送到服务器,服务器则把从客户端传来的cookie将自动地转化成一个PHP变量,通过$_COOKIE['xxx']读取客户端发来的cookie。


创建 cookie
      通过 setcookie() 函数来创建一个 cookie,成功返回 TRUE ,否则返回 FALSE 。
      语法:
      bool setcookie( string name [, string value [, int expire [, string path [, string domain ]]]] )

如果时间参数被省略,cookie 将会在会话结束后(一般是浏览器关闭)失效。

参数

说明

举例

name

Cookie 的名字。

$_COOKIE['cookiename']

value

Cookie 的值。此值保存在客户端,不要用来保存敏感数据。

name 是 'cookiename',可以通过 $_COOKIE['cookiename']

expire

Cookie 过期的时间。这是个 Unix 时间戳,即从 Unix 纪元开始的秒数。换而言之,通常用 time() 函数再加上秒数来设定 cookie 的失效期。或者用mktime()来实现。


time()+60*60*24*30

path

Cookie 在服务器端的有效路径。

'/' 的话,cookie 就在整个 domain 内有效,如果设为 '/foo/',cookie 就只在 domain 下的 /foo/ 目录及其子目录内有效,例如 /foo/bar/。默认值为设定 cookie 的当前目录。

domain

该 cookie 有效的域名。

'.example.com'。虽然 . 并不必须的,但加上它会兼容更多的浏览器。如果该参数设为 www.example.com 的话,就只在 www 子域内有效。细节见Cookie 规范中的 tail matching。

secure

TRUE 时,cookie 仅在安全的连接中被设置。默认值为 FALSE

0 或 1


销毁 cookie
      可以通过设置 cookie 过期时间为以前的时间点来销毁一个 cookie 。  


Cookie注意事项
      1、SetCookie()之前不能有任何html输出,就是空格,空白行都不行。
      2、Cookie 不会在设置它的本页生效,SetCookie()后,你在当前页调用echo $_COOKIE["name"]不会有输出。必须刷新或到下一个页面在过期之前才可以看到Cookie值。过期时间是通过参数 expire 来设置的,可以简单地使用 print_r($_COOKIE); 来调试现有的 cookies。
      3、Cookie 必须用和设定时的同样的参数才能删除。如果其值是一个空字符串,或者是 FALSE,并且其它的参数都和前一次调用 setcookie 时相同,那么所指定名称的 cookie 将会在远程客户端被删除。
      4、由于 cookie 信息存储于用户的计算机中,那么就有可能伪造或修改 cookie 从而造成 cookie 欺骗,一般可以对 cookie 的值进行加密来预防欺骗,读取 cookie 的时候,对 cookie 解密即可。
      5、可以把 cookie 的名称设置成一个数组,但是数组 cookie 中的每个元素的值将会被单独保存在用户的系统中。考虑使用 explode() 函数用多个名称和值设定一个 cookie。不推荐将 serialize() 用于此目的,因为它可能会导致一个安全漏洞。
      6、Cookie是保存在客户端的,用户禁用了Cookie,你的Cookie自然也就没作用啦!

每个域名最多支持20个Cookie,如果达到限制,浏览器会自动随机删除Cookie文件。

<?php
    date_default_timezone_set(PRC);

    // Cookie是Http头标的组成部分,而头标必须在页面其他信息发送之前发送,因此它必须最先输出。
    // 不能在setcookie之前输出Http标记、echo语句等。   
    if(!isset($_COOKIE['visitTime']))
    {
        setcookie('visitTime', date("y-m-d H-i-s"), time() + 60);
        echo '欢迎第一次访问';
    }
    else
    {
        setcookie('visitTime', date("y-m-d H-i-s"), time() + 60);
        echo '上次访问的时间'.$_COOKIE[visitTime];
    }
    
    // 删除Cookie
    //setcookie('visitTime', "", time()-1);    
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>

<body>
</body>
</html>