前言
會話一般是指TCP三次握手就創建了一個會話,然後在會話中 ,傳輸數據,等TCP關閉連接就關閉會話了。HTTP協議是基於TCP協議的,所以http會話也是在TCP關閉連接後就關閉會話,而在http1.1中,一般一個連接就只能處理一個請求,那如果需要用到權限驗證等就無法準確的判斷,這使用就需要用到會話了。
會話保持
目前後端的語言框架基本都有處理會話的模塊,一般有以下幾種方式:
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支持以上這幾種的會話保持方式。
總結
以上觀點都是個人看法,如有誤,歡迎留言討論。
閱讀更多 linux運維菜 的文章