文章目錄
關於cookie:
- 原理: Cookie是由HTTP服務器設置的,保存在瀏覽器中,但HTTP協議是一種無狀態協議,在數據交換完畢後,服務器端和客戶端的鏈接就會關閉,每次交換數據都需要建立新的鏈接。cookie又叫會話跟蹤機制,打開一次瀏覽器到關閉瀏覽器算是一次會話。
- 區別: session機制採用的是在服務器端保持狀態的方案,而cookie機制則是在客戶端保持狀態的方案。
一、創建cookie
1、如何設置cookie:
- make_response(),resp.set_cookie設置cookie
- max_age():設置有效期,單位爲s
- resp.headers:通過響應頭來設置cookie
from flask import Flask, make_response
def set_cookie():
"""定義的視圖函數"""
resp = make_response("success")
# 設置cookie,前爲cookie名,後爲cookie值,默認有效期是臨時cookie,瀏覽器關閉失效
resp.set_cookie("Itcast", "Python")
# max_age設置有效期,單位爲s
resp.set_cookie("Itcast1", "Python1", max_age=3600)
resp.headers["Set-Cookie"] = "Itcast3=Python3; Expires=Tue, 04-Feb-2020 11:39:45 GMT; Max-Age=3600; Path=/"
return resp
2、如何查看新建cookie信息:
方法一:
方法二:
通過設置響應頭信息,來創建cookie
3、cookie有效期設置:
cookie到期時間默認爲關閉瀏覽器失效
cookie中設置爲1小時max_age=3600,到期時間爲創建cookie後一小時失效。
4、創建cookie過程:
如何創建cookie呢?在響應頭裏,會增加一行Set-Cookie一行,從而創建cookie
二、獲取cookie值:
from flask import Flask, request
@app.route("/get_cookie")
def get_cookie():
# 獲取cookie值
c = request.cookies.get("Itcast")
return c
三、刪除cookie
- 刪除cookie值,注意不是當時立即刪除掉,而是將到期時間設置爲創建時間,瀏覽器關閉後自動刪除。
from flask import Flask, make_response
@app.route("/delete_cookie")
def delete_cookie():
resp = make_response("del success")
# 刪除cookie
resp.delete_cookie("Itcast1")
return resp
四、完整代碼:
from flask import Flask, make_response, request
app = Flask(__name__)
@app.route("/set_cookie")
def set_cookie():
"""定義的視圖函數"""
resp = make_response("success")
# 設置cookie,前爲cookie名,後爲cookie值,默認有效期是臨時cookie,瀏覽器關閉失效
resp.set_cookie("Itcast", "Python")
# max_age設置有效期,單位爲s
resp.set_cookie("Itcast1", "Python1", max_age=3600)
resp.headers["Set-Cookie"] = "Itcast3=Python3; Expires=Tue, 04-Feb-2020 11:39:45 GMT; Max-Age=3600; Path=/"
return resp
@app.route("/get_cookie")
def get_cookie():
# 獲取cookie值
c = request.cookies.get("Itcast")
return c
@app.route("/delete_cookie")
def delete_cookie():
resp = make_response("del success")
# 刪除cookie
resp.delete_cookie("Itcast1")
return resp
if __name__ == '__main__':
print(app.url_map)
app.run()
關於session
更加深入學習可參考以下鏈接:
https://dormousehole.readthedocs.io/en/latest/
https://pythonhosted.org/Flask-Session/
此處前言及實現原理轉自此鏈接,可跳轉詳細學習:
- 前言
flask_session是flask框架實現session功能的一個插件,用來替代flask自帶的session實現機制,flask默認的session信息保存在cookie中,不夠安全和靈活。
session是用來幹什麼的呢?由於http協議是一個無狀態的協議,也就是說同一個用戶第一次請求和第二次請求是完全沒有關係的,但是現在的網站基本上有登錄使用的功能,這就要求必須實現有狀態,而session機制實現的就是這個功能。
- 實現的原理:
用戶第一次請求後,將產生的狀態信息保存在session中,這時可以把session當做一個容器,它保存了正在使用的所有用戶的狀態信息;這段狀態信息分配了一個唯一的標識符用來標識用戶的身份,將其保存在響應對象的cookie中;當第二次請求時,解析cookie中的標識符,拿到標識符後去session找到對應的用戶的信息。
一:設置session數據:
用字典,鍵值的方式進行設置session數據。
from flask import Flask, session
# flask的session所需要用到的密鑰字符串,防止從瀏覽器進行篡改數據
app.config["SECRET_KEY"] = "ksjjdljkjklsjkljlasil"
@app.route("/login")
def login():
# 設置session數據
session["name"] = "python"
session["mobile"] = "15600000000"
return "login succcess"
二:獲取session數據:
用獲取字典的方式獲取session獲取數據。
@app.route("/index")
def index():
# 獲取session數據
name = session.get("name")
return "hello %s" % name
三、session運行機制:
第一種:保存數據方式:將數據存放在cookie中,瀏覽器發出請求,在後端數據庫中搜索數據,服務器返回session_id=1,瀏覽器接收後存入cookie。
第二種:在路徑中存session數據,輸入路徑進行請求,存入數據庫中,服務器通過redirect返回session_id,通過路徑中設置session_i
四、session保存機制:
session數據除了可以保存在數據庫中,還可以保存在Redis,文件,程序內存裏。通過nginx進行分配訪問多臺服務器,減輕一臺服務器處理數據的壓力。
完整代碼:
from flask import Flask, session
app = Flask(__name__)
# flask的session所需要用到的密鑰字符串,防止從瀏覽器進行篡改數據
app.config["SECRET_KEY"] = "ksjjdljkjklsjkljlasil"
@app.route("/login")
def login():
# 設置session數據
session["name"] = "python"
session["mobile"] = "15600000000"
return "login succcess"
@app.route("/index")
def index():
# 獲取session數據
name = session.get("name")
return "hello %s" % name
if __name__ == '__main__':
print(app.url_map)
app.run()