memcached、cookie、session

Memcached(一個高性能的分佈式的內存對象緩存系統)數據庫

  可用來分擔數據庫的壓力。經過在內存裏維護一個統一的巨大的hash表,memcached能存儲各類各樣的數據,包括圖像、視頻、文件、以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,而後從內存中讀取,從而大大提升讀取速度。django

適用:存儲驗證碼(圖形驗證碼、短信驗證碼)、登陸session等全部不是相當重要的數據。flask

安全性:
瀏覽器

 

  1. 使用 -l 參數設置爲只有本地能夠鏈接:這種方式,就只能經過本機才能鏈接,別的機器都不能訪問,能夠達到最好的安全性。
  2. 使用防火牆,關閉11211端口,外面也不能訪問。

django中使用需在 settings.py 中配置好緩存;緩存

添加 KEY_FUNCTION 參數:django在存儲數據到memcached中的時候,可自定義前綴。安全

1 # 配置memcached緩存;
2 CACHES = {
3     'default': {
4         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
5         # 可指定多個鏈接:['172.19.26.240:11211','172.19.26.242:11211',]
6         'LOCATION': '127.0.0.1:11211',
7         'KEY_FUNCTION': lambda key,prefix_key,version:"django:%s"%key
8     }
9 }
1 # views.py
2 from django.core.cache import cache
3 from django.http import HttpResponse
4 def index(request):
5     cache.set('name','jack',60)
6     name = cache.get('name')
7     print('name')
8     return HttpResponse("index")

 

在終端使用 Telnet 127.0.0.1 11211  訪問數據:服務器

 

 django:name :爲 KEY_FUNCTION 所定義的參數。cookie

 

cookiesession

  在網站中,http請求是無狀態的。第一次登陸後服務器返回一些數據(cookie)給瀏覽器,而後瀏覽器保存在本地,當該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器經過瀏覽器攜帶的數據就能判斷當前是哪一個用戶。cookie存儲的數據量有限,不一樣的瀏覽器有不一樣的存儲大小,但通常不超過4KB。所以使用cookie只能存儲一些小量的數據。框架

 

session

   與cookie的做用相似,都是爲了存儲用戶相關的信息。(session的出現,是爲了解決cookie存儲數據不安全的問題的。)

 

  • 二者不一樣點:cookie是存儲在本地瀏覽器,session是一個思路、一個概念、一個服務器存儲受權信息的解決方案,不一樣的服務器,不一樣的框架,不一樣的語言有不一樣的實現。雖然實現不同,可是他們的目的都是服務器爲了方便存儲數據的。
  • cookie和session使用:
    1. server side session:(存儲在服務端)經過cookie存儲一個sessionid,而後具體的數據則是保存在session中。若是用戶已經登陸,則服務器會在cookie中保存一個sessionid,下次再次請求的時候,會把該sessionid攜帶上來,服務器根據sessionid在session庫中獲取用戶的session數據。就能知道該用戶究竟是誰,以及以前保存的一些狀態信息。叫作。Django把session信息默認存儲到數據庫中,固然也能夠存儲到其餘地方,好比緩存中,文件系統中等。存儲在服務器的數據會更加的安全,不容易被竊取。但存儲在服務器也有必定的弊端,就是會佔用服務器的資源,但如今的服務器存儲session信息仍是綽綽有餘的。
    2. client side session :將session數據加密,而後存儲在cookie中。flask框架默認採用的就是這種方式,可是也能夠替換成其餘形式。

 

操做

  經過 response.set_cookie 來設置cookie;使用 request.session 操做session:

 1 from django.http import HttpResponse
 2 
 3 # 設置cookie的名字,內容,存在時長;
 4 def index(request):
 5     response = HttpResponse('index')
 6     response.set_cookie('username','jack',max_age=120)
 7     return response
 8 
 9 # session數據
10 def session_view(request):
11     request.session['username'] = 'jack'
12     username = request.session.get('username')
13     return HttpResponse('%s'%username)

 

修改session的存儲機制:

  默認狀況下,session數據是存儲到數據庫中的。固然也能夠將session數據存儲到其餘地方。能夠經過設置 SESSION_ENGINE 來更改session的存儲位置,這個能夠配置爲如下幾種方案:

  1. django.contrib.sessions.backends.db:使用數據庫。默認方案;
  2. django.contrib.sessions.backends.file:使用文件來存儲session;
  3. django.contrib.sessions.backends.cache:使用緩存來存儲session。想要將數據存儲到緩存中,前提是你必需要在settings.py中配置好CACHES,而且是須要使用Memcached,而不能使用純內存做爲緩存;
  4. django.contrib.sessions.backends.cached_db:在存儲數據的時候,會將數據先存到緩存中,再存到數據庫中。這樣就能夠保證萬一緩存系統出現問題,session數據也不會丟失。在獲取數據的時候,會先從緩存中獲取,若是緩存中沒有,那麼就會從數據庫中獲取;
  5. django.contrib.sessions.backends.signed_cookies:將session信息加密後存儲到瀏覽器的cookie中。這種方式要注意安全,建議設置SESSION_COOKIE_HTTPONLY=True,那麼在瀏覽器中不能經過js來操做session數據,而且還須要對settings.py中的SECRET_KEY進行保密,由於一旦別人知道這個SECRET_KEY,那麼就能夠進行解密。另外還有就是在cookie中,存儲的數據不能超過4k。

 

使用 django.contrib.sessions.backends.cached_db 的存儲機制:

 1 # settings.py
 2 # 配置memcached緩存;
 3 CACHES = {
 4     'default': {
 5         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
 6         'LOCATION': '127.0.0.1:11211',
 7     }
 8 }
 9 # 設置session存儲機制;
10 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

 

終端的值與數據庫的值一致:

相關文章
相關標籤/搜索