[TOC]
# 会话管理
******
在 http 协议中,我们了解到了,http 每次请求都是握手/挥手,第二次和第一次请求时没有任何关联的,属于无状态协议,那么问题来了,既然 http 是无状态协议,那服务器是怎么区分不同的用户呢?这就是会话了。
<br />
## 基础讲解
服务器能区分用户的原理主要就是在于会话,每次发起 http 请求时,都附加上一条身份识别数据,例如下面的这个 http 请求头:
```
GET / HTTP/1.1
Host: www.easyswoole.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: Hm_lvt_4c8d895ff3b25bddb6fa4185c8651cc3=1541986142,1542074627,1542158990,1542252497; Hm_lpvt_4c8d895ff3b25bddb6fa4185c8651cc3=1542252498
```
<br />
抛开 http 本身需要的数据,我们讲解下:
```
User-Agent: 用户端信息,浏览器的各种信息
Cookie: cookie会话
```
<br />
服务端可以通过 User-Agent 获得用户的浏览器信息,可以通过 cookie 获取自定义的信息,所以我们可以:
* 用户 A 第一次进入,没有附带 cookie
* 服务端记录这个用户,响应头增加一个 set_cookie:id=1 的 cookie
* 浏览器获得响应头,解析到 set_cookie 动作,把 id=1 存进 cookie
* 第二次请求服务端,带上 id=1 的 cookie,服务端就可以知道:这次请求是用户 A 请求的
* 同理,用户 B 第一次进入,服务端响应 set_cookie:id=2
* ...
可以看出,只要用户端每次请求,跟服务端约定好一个参数作为用户标识,服务端就可以通过这个标识区分不同的用户了。
- 引言
- Introduction
- 运行模式
- php-fpm
- php-cli
- 基础介绍
- 网络协议
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 会话管理
- cookie
- session
- api/token
- linux基础
- lnmp安装
- 命令
- 进程管理
- 扩展安装
- 端口监控
- 防火墙说明
- php7.0
- 部分新特性
- php回调/闭包
- 回调事件
- 闭包/匿名函数
- php多进程
- 多进程开启
- 进程通信
- 进程信号
- 僵尸进程
- 孤儿进程
- 守护进程
- 同步/异步
- 阻塞/非阻塞
- 协程
- Swoole
- 初始Swoole
- 运行机制
- 生命周期
- composer使用
- EasySwoole
- 设计理念
- 组件说明
- 运行过程
- demo
- 提问的艺术