1. 程式人生 > >關於http連接的本質 已經cookies和session

關於http連接的本質 已經cookies和session

日期 pos 本質 cal 應用 容量 ket 關於 cookie

網絡上的任何交互都是基於socket連接

http 連接響應 close 再次連接 無法確實是否還是xx的連接——無狀態,短連接

以博客園舉例 無狀態和短連接:

for example:

    

Web應用(網站):

瀏覽器(socket客戶端)運行

2.發送請求

博客園為例子 socket服務端)

  1. 監聽自己的ip和端口 { cmdPing+網址可在終端拿到(ip}

While Ture

3.收到 請求

4.響應

用戶斷開

#################################################

關於cookies和session的總結(ps:不是很全)

1. http協議的無狀態性:

使用cookie:
第一次向服務器發起請求,服務器返回一個cookie給客戶端,
客戶端存儲cookie,當客戶端再次發起請求時攜帶cookie信息給服務器,
服務器接收到cookie信息能夠獲取用戶信息

不使用cookie:
第一次向服務器發起請求,服務器返回一個響應給客戶端
第二次再次向服務器發起請求,服務器仍然不知道是哪一個用戶發起的請求

2. 使用cookie可以彌補這種http請求的無狀態性

1. 客戶端發起請求(包含用戶信息),服務器接收到請求,驗證用戶信息,同時返回響應給客戶端(攜帶cookie)

2. 客戶端接收響應(存儲cookie)

3. 客戶端再次發起請求就會攜帶cookie信息,服務器就能知道是哪個用戶發起的請求了

【註意】:
1. cookie不能跨域傳遞
2. 使用cookie存儲數據的容量是有限的, 不能使用cookie存儲大量文本信息。
一般來說用cookie存儲用戶名, sessionid
不同的瀏覽器, cookie容量不同,最大不會超過4kb


3. 在django中操作cookie

1. 設置cookie

p = HttpResponse()
p.set_cookie(key, value) # 默認過期時間: 瀏覽器關閉時,不是標簽頁關閉
p.set_cookie(key, value, max_age=60) # 單位是秒, 設置過期時間

from django.utils.timezone import make_aware

帶時區的時間日期對象 = make_aware(時間日期對象)
p.set_cookie(key, value, expires=時間日期對象(帶時區))

* 如果同時設置了max_age和expires, 則使用expires的過期時間

2. 刪除cookie

p = HttpResponse()
p.delete_cookie(‘name‘)

3. 獲取cookie

request.COOKIES.get(‘name‘)
POST
GET
FILES

PS:(
cookie是保存在客戶端的(瀏覽器)
cookie在客戶端中分域名保存
發起請求時客戶端自動將當前域名(路勁)下未過期的cookie攜帶上

4. session

1. 基於cookie實現

2. 過程:

1. 客戶端發起請求(用戶信息), 服務器接收到請求,
驗證通過, 將用戶信息加密後存儲到session表中,對應著隨機生成的session_id

2. 服務器返回響應, 攜帶cookie, cookie中存儲的是session_id

3. 客戶端接收到響應, 存儲cookie信息到本地瀏覽器中

4. 客戶端再次發起請求, 攜帶cookie信息(session_id),
服務器接收到請求後,通過session_id就能獲取用戶信息


註意: cookie存儲在客戶端(瀏覽器)
session存儲在服務器

5. 在django中操作session

1. 存儲:

request.session[‘key‘] = ‘value‘

同一個用戶,創建多個session鍵值對,在django_session表中只存儲為一條session數據;
session表中的session_key是固定的。

2. 獲取:

request.session[]
request.session.get()
request.session.items()
request.session.keys()
request.session.values()

3. 刪除:

request.session.pop(‘key‘)

4. 清除數據:

request.session.clear() # 清除當前用戶存儲的session鍵值對,session表中的session數據還在
cookie中仍然有session_id的值

request.session.flush() # 註銷;退出登錄;
在session表中刪除當前用戶的整條session數據,
cookie中的session_id也被刪除了

* 同一個客戶端的同一個用戶也可能會產生多條session表中的數據,因為之前的數據都過期了

5. 刪除過期的session

1. 代碼 request.session.clear_expired()

2. 命令行 python manage.py clearsessions

6. 設置過期時間

request.session.set_expiry()

1. 整型參數: 秒
2. 0:瀏覽器關閉
3. None:默認的過期時間,2周

settings.py

TIME_ZONE = ‘Asia/Shanghai‘
USE_TZ = False

關於http連接的本質 已經cookies和session