1. 程式人生 > >Flask中的session與cookie

Flask中的session與cookie

Flask中的session與cookie

cookie: 客戶端瀏覽器的快取
session: 服務端伺服器的快取

1.session的概念

session和cookie的作用有點類似,都是為了儲存使用者相關的資訊。而cookie是儲存在本地瀏覽器,session是一個思路、一個概念、一個伺服器儲存授權資訊的解決方案,不同的伺服器,不同的框架,不同的語言有不同的實現。雖然實現不一樣,但是他們的目的都是伺服器為了方便儲存資料的。session的出現,是為了解決cookie儲存資料不安全的問題的。
Session 物件儲存特定使用者會話所需的屬性及配置資訊。這樣,當用戶在應用程式的 Web 頁之間跳轉時,
儲存在 Session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。當用戶請求來自應用程式的Web 頁時,如果該使用者還沒有會話,則 Web 伺服器將自動建立一個 Session 物件。當會話過期或被放棄後,伺服器將終止該會話。Session 物件最常見的一個用法就是儲存使用者的首選項。

session儲存在伺服器中:

伺服器端可以採用mysql、redis、memcached等來儲存session資訊。原理是,客戶端傳送驗證資訊過來(比如使用者名稱和密碼),伺服器驗證成功後,把使用者的相關資訊儲存到session中,然後隨機生成一個唯一的session_id,再把這個session_id儲存cookie中返回給瀏覽器。瀏覽器以後再請求我們伺服器的時候,就會把這個session_id自動的傳送給伺服器,伺服器再從cookie中提取session_id,然後從伺服器的session容器中找到這個使用者的相關資訊。這樣就可以達到安全識別使用者的需求了。
在這裡插入圖片描述

session儲存在客戶端中:

客戶端傳送驗證資訊過來(比如使用者名稱和密碼)。伺服器把相關的驗證資訊進行一個非常嚴格和安全的加密方式進行加密,然後再把這個加密後的資訊儲存到cookie,返回給瀏覽器。以後瀏覽器再請求伺服器的時候,就會自動的把cookie傳送給伺服器,伺服器拿到cookie後,就從cookie找到加密的那個session資訊,然後也可以實現安全識別使用者的需求了。
在這裡插入圖片描述

2.flask操作session

(1). 匯入session
from flask import session
(2). 設定session_key
from flask import  Flask, session
import  random
app  = Flask(__name__)
app.config['SECRET_KEY'] =  random._urandom(24)
# 設定是24位的字元, 每次執行伺服器的secret_key都是不同的,
# 伺服器重啟後會清除上一次儲存的session資訊值;
(3). 設定session值
@app.route('/')
def index():
    # 設定session的key-value值
    session['name'] = 'westos'
    return "hello world"
(4). 獲取session值
@app.route('/get/')
def get():
    # 獲取session的值
    return  session.get('name')
(5). 刪除session值
@app.route('/delete/')
def delete():
    # 刪除session的值
    print(session.get('name'))
    session.pop('name')
    print(session.get('name'))
    return  'delete'