http session會話保持的幾種方式

前言

會話一般是指TCP三次握手就創建了一個會話,然後在會話中 ,傳輸數據,等TCP關閉連接就關閉會話了。HTTP協議是基於TCP協議的,所以http會話也是在TCP關閉連接後就關閉會話,而在http1.1中,一般一個連接就只能處理一個請求,那如果需要用到權限驗證等就無法準確的判斷,這使用就需要用到會話了。

http session會話保持的幾種方式


會話保持

目前後端的語言框架基本都有處理會話的模塊,一般有以下幾種方式:

http session會話保持的幾種方式

1、存放到文件

將session的信息存放到文件中,在客戶端第二次請求的時候,系統就會在文件查找相關的session信息進行驗證或者返回指定的數據。

2、存放到內存

session信息存放到文件就會涉及到磁盤IO讀寫的瓶頸,因此存放到內存可以有效的提升效率。

上面兩種方法在單機的時候都可以很順利的進行,如果是多臺服務器進行處理,需要共享session就比較難處理了。如果是存放到文件可以使用文件共享服務(例如:NFS)進行文件共享,但是NFS對高併發的讀寫性能真的不行啊;存放到內存,有些服務(例如:tomcat)可以直接共享session給同一個集群的其他機器,但是高併發的情況下,會對後端的服務性能有影響。

3、cookies加密存放

可以將信息存放到客戶端的cookies中,客戶端請求的時候帶上cookies信息,這樣子請求無論到哪臺服務器,都可以有指定的會話標識,但是這樣子感覺不安全,客戶端不好控制啊。

4、存放到數據庫

同一個後端的服務一般都是連接同一個數據庫,可以將session信息存放到數據庫裡面,這樣子同個集群的服務器都可以獲取到session信息了。但是這樣子會給數據庫增加很大的負擔,因為session信息的查詢還是比較頻繁的。

5、存放到緩存服務

memcachd、redis等緩存服務,效率都是很高的,可以將session存放到這些服務中,查詢效率高,又可以實現共享session的目的。

Python Django支持以上這幾種的會話保持方式。


http session會話保持的幾種方式

總結

以上觀點都是個人看法,如有誤,歡迎留言討論。


分享到:


相關文章: