-
什么是会话
- 会话就是具有逻辑关联的多个简单交互的集合
为什么需要会话
- http是无状态协议
- 每个请求都是单独处理的
- 这也就意味着, 服务器对于两次请求, 不知道是一个用户请求两次, 还是两个用户, 请求一次...
- 解决无状态的思路就是给请求添加独立的标记
- 比如超市无法记录每个顾客的购物历史, 所以发明了
会员卡
会话控制
- 控制会话的开始和结束
- 识别并处理会话内的请求
- 更新会话的状态
会话控制的几种方式
- cookie
- session
cookie
- 保存在客户端(浏览器)
- 用于存储用户的关键信息
- 通过http请求头和响应头来传输
session
- 保存在服务端
- 用于存储用户的相关信息
- 通过保存在cookie里的sessionid来定位session内容
cookie能做什么?
- 标记用户
- 标记客户端
- 存储简单信息
cookie的工作原理
- 用户请求服务器
- 服务器在HTTP响应中设置cookie
- 在cookie的有效期内, 用户的每次请求都会携带cookie的值
- 服务器识别并处理cookie的内容
- 在携带cookie时, 只可以访问域名相同, 路径匹配并且在有效期内的cookie
- 通过cookie指令发送具有访问权限的cookie的值
- 多个值用
分号
隔开
cookie什么时候会失效
- cookie过期
- 手动删除cookie, chrome 的快捷键
ctrl + shift + delete
- 删除单条, 需要找到
内容设置
,cookie
,查看cookie和所有访问数据
, 手动删除 - 使用服务器清除cookie的有效性, 设置过期时间为一个过去的时刻, 这样的话, cookie 则不可访问
cookie的使用
设置/修改cookie 的值
setcookie()
- 返回值是boolean, 如果成功设置返回true, 失败返回false
- 第一个参数, cookie的名称
- 第二个参数, cookie的值
- 第三个参数, 过期时间, 是一个时间戳
$result = setcookie('username', 'admin', time()+3600); if($result){ echo "设置成功!"; }else{ echo "设置失败!!!"; }
-
cookie和session的区别(异同点):
- 相同点:
- 都可以用来标记用户, 客户端, 可以存储数据
- http协议的一个补充, 可以实现会话控制
- 不同点:
- 存储方式不同:
- cookie是保存在客户端的(浏览器)
- session是保存在服务器上的
- sessionid是存在cookie里的
- 存储内容不同:
- cookie可以存储简单数据, 比如字符串
- session可以存储复杂的数据, 比如数组, 对象
- 工作方式不一样
- cookie利用http协议直接传输会话数据
- session利用sessionid来定位会话
- 存储方式不同:
- 相同点:
session
// 创建一个 session
session_start();
$_SESSION['sessionName'] = 'sessionValue';
echo "session_id:".session_id(); // 显示当前的session_id
echo "<br>";
// 读取 session 的值
echo $_SESSION['sessionName'];
//销毁一个session
unset($_SESSION['sessionName']);
echo "<br>";
var_dump($_SESSION);