[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
- 提問的藝術