1. 什么是cookie

cookie是一段信息,由脚本在客户端机器存储。可以通过发送一个特定数据的HTTP头,从而在用户端机器设置一个cookie。

Set-Cookie: NAME=VALUE;[expires=DATE;][path=PATH;]
            [domain=DOMAIN_NAME][secure]

这会创建一个名为NAME,值为VALUE的cookie,其他参数都是可选的,expires域设置cookie失效日期,path和domain域指定cookie相关URL,secure意思是在HTTP连接中不发送cookie。


2. PHP设置cookie

可以使用setcookie()函数在PHP中手动设置cookie,原型如下:

bool setcookie(string name[, string value[, int expire
              [, string path[, string domain[, int secure]]]]])

例如:

setcookie('mycookie', 'value');

可以通过$_COOKIE['mycookie']来取得用户cookie。


3. 什么是会话

PHP的会话是通过唯一的会话ID来驱动的,会话ID是一个加密的随机数字,它由PHP生成,在会话生命周期中保存在客户端。会话ID允许我们注册一些特定变量,即会话变量,这些变量保存服务器上的普通文件中。

客户端可以通过cookie或URL看到会话ID。因为一些浏览器不接受cookie,所以PHP会话控制使用cookie/URL双模式。


4. 开始会话

在使用会话前,必须开始一个会话,可以使用两种方法开始一个会话。

1) session_start()

可以使用session_start()函数开始一段脚本,这个函数将检查是否有一个会话ID存在,如果不存在,则创建一个,并使其能够通过$_SESSION进行访问,如果已经存在,将这个已注册的会话变量载入以便使用。

2) PHP设置

可以使用PHP设置成当有用户访问时自动启动一个会话。在php.ini中的session.auto_start选项完成该设置。


5. 使用会话

要创建一个会话变量,只需在$_SESSION中设置一个元素,例如:

$_SESSION['var'] = 1;

创建的会话变量只有在会话结束或手动重置时才会失效。php.ini中也可以通过设置gc_maxlifetime指令设置会话的持续时间,超过时间,会话将被垃圾回收。

当使用完一个会话变量后,可以通过unset注销变量,例如:

unset($_SESSION['var']);

session_unregister()函数和session_unset()函数不再推荐使用。

不能销毁整个$_SESSION数组,这将禁用会话功能,如果要一次销毁所有会话变量,可以使用如下方法:

$_SESSION = array();

当使用完一个会话后,首先注销所有变量,再调用如下方法来清除会话ID:

session_destroy();