先来一句总结性的话:
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份
一、Cookie
-
定义:
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
-
包含内容:
名字(Name),值(Value),过期时间(Expires),路径(Path)和域(Domain),secure,httponly构成
路径(Path)与域(Domain)一起构成cookie的作用范围。
-
Name:指定Cookie的名字
-
Value:Cookie的值
-
Expires:设置Cookie的过期时间,默认值为0,单位是秒数
-
Path:设置Cookie的有效路径,默认是当前目录及其子目录有效,也可以指定成整个根目录/,在整个根目录下有效
-
domain:设置Cookie的作用域,默认在本域下
-
secure:设置是否Cookie只能通过HTTPs传输,默认值的false
-
httponly:是否只使用HTTP访问Cookie。默认值是false,如果设置成true,那么客户端的JS就无法操作这个Cookie了,使用这个参数可以减少XSS攻击
通过谷歌浏览器查看Cookies
-
-
cookie种类
-
内存cookie
由浏览器来维护,保存在内存中,浏览器关闭之后就消失了,存在客户端中
-
硬盘cookie
保存在硬盘里,有一个过期时间,除非用户手动清除或者到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的
-
-
代码实现:
待补充…
二、Session
-
定义
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录,在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。
-
工作原理
- 准备建立会话的时候,PHP会先查看请求中是否包含session_id,如果没有服务器会在自己的内存里创建一个新的变量,这个变量就是session_id,假如这个变量就是session_1234
- 服务器会把这个session_id发送到浏览器保存,一般浏览器会把这个id保存在cookie中
- 之后每次我的浏览器再去访问服务器的时候,都会携带cookie中存储的这个session_1234,这样服务器就认识这个浏览器了
- 服务器端这个session_1234变量可以存放任意的会话数据,这些数据是经过序列化之后放进去的
- 每次浏览器访问服务器,都可以凭借自己的session_id到服务器的这个变量中认领自己的信息
- 如果想销毁会话,可以删掉会话中的数据,销毁会话文件
-
PHP中使用会话
-
开启会话
session_start()
-
通过$_SESSION来设置相关值,设置和读取都使用这个全局变量
-
销毁session
-
将$_SESSION清空
$_SESSION=[]
-
将cookie中的数据删除
setcookie()
-
销毁会话
session_destroy()
-
-
-
代码实现
待补充…
三、资料来源