首页 > 代码库 > Cookie & Session【会话管理与控制】

Cookie & Session【会话管理与控制】

用现实生活 类比Cookie 和 Session :

两个关于开会的故事:

  1. 在几十年前人们开会的时候,都需要带上一个参会证。这个参会证上有这个人的职务、姓名、单位、照片等信息。在开会的时候,会议安保人员、组织者只需要检查相关信息就行了。(个人信息,由自己携带)

  2. 几十年后,越来越先进了。你参会前,会给你发一个卡片或者工牌。这个卡片上有一个唯一的号码。拿到号码,再用摄像头扫一扫即可完成你的个人信息核对。(个人信息,由会议主办方的数据库保存)

在电脑里面也有这两种验证方式:

  1. 人们在参会证上写着所有的相关信息,这种会话方式我们叫做cookie。这种模式,信息是保存在用户电脑上(客户端)的。

  2. 人们只需要带一个卡片或者磁卡,通过这个卡片去验证你的照片、姓名等信息的方式,我们叫做session。它只在用户本地存一组小小的值,其他信息全是存在服务器上的。

 总结:数据存储在自己身上,这是Cookie; 数据存储在别人那里,我只有一个门卡,这是Session。

 

什么是会话?

  即客户端和服务器之间的对话过程。

  HTTP协议是无状态的。何谓无状态?你输入我的网址,我就给你传送数据,我可不管你是谁。

  而我们在现实情况中,服务器往往需要知道你是谁?这就需要用到cookie和session会话技术了。

 

它们都分别存储在哪里?

  Cookie是通过将数据保存在客户端来实现与服务端保持连接的,而Session是通过将数据保存在服务器端来实现保持连接的。

Cookie存在哪儿?

  Cookie的本质是一小段数据,一小段存储在你电脑硬盘中的数据。

  Domain代表的是cookies所属的网站,Name代表的是这个Cookie的名字,Value代表的是Cookie的值,Expires代表的是这个Cookie的有效期。

Session存储在哪里?

  在php.ini配置文件中有这么一行 session.save_handler = files,  files,说明了php默认的是用文件读写的方式来保存session的。

 

使用Cookie

1、如何向Cookie中添加数据? 使用 setcookie()函数。

  bool setcookie (string $名字[, string $值][, int $过期时间 = 0][, string $路径][, string $域名][, bool $安全 = false][, bool $http只读 = false]);

  参数说明:
    $名字 必需。规定 cookie 的名称。
    $值 可选。规定 cookie 的值。
    $有效期 可选。规定 cookie 的有效期。
    $路径 可选。规定 cookie 的服务器路径。
    $域名 可选。规定 cookie 的域名。
    $安全 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
    $http安读 可选。如果true,那么js就无法读取改cookie,增加安全性。

  常用三个参数setcookie(cookie名,cookie值,cookie有效期);

2、如何从Cookie中读取数据?

  在服务端,通过$_COOKIE[‘name‘] 来读取cookie中的数据。

  特别注意:我们一般是不会把用户名和密码放到cookie中的,因为这并不安全,容易泄露自己的信息。务必注意:重要的信息不要放到cookie中。

 

使用Session

1、无论向session中添加数据,还是从session中销毁数据,都需要先开启Session:

  session_start();     这个函数无须参数,它用于开启Session。

2、如何向session中添加数据?

  $_SESSION[‘userName‘] = ‘wang‘;  这是添加数据的语法。

3、如何从session中读取数据?

  $userName = $_SESSION[‘userName‘];  这是读取数据的语法。

4、如何销毁session中的数据?(有多种方式)

  销毁数据之前,也需要先开启Sesson。

  方式1) unset($_SESSION[‘XXX‘]);      

    它用于销毁session中的 XXX 变量。

    警告:请不要 unset($_SESSION);  这会导致后续无法使用$_SESSION这个变量了。

  方式2) 把空数组赋值给$_SESSION变量   $_SESSION = array();

    $_SESSOIN变量是个数组,那么空数组赋值的话也是相当于将当前会话的$_SESSION变量中的值销毁。

  方式3)  session_destory();

    这个函数会销毁当前会话中的全部数据,并结束当前会话。但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。

Cookie & Session【会话管理与控制】