一、Cookie的使用
1、什么是Cookie
我們都知道,HTTP
協議是無狀態的,也就是說,在一次請求響應結束后,服務端不會保留任何對方狀態的信息,對于某些需要保留的信息,可以通過 Cookie
技術來完成,通過在請求和響應報文中添加 Cookie
數據來保存客戶端的狀態信息。
Web 服務器為了存儲某些數據(比如用戶信息) 而保存在瀏覽器上的小型文本數據,瀏覽器會在一定時間內保存它,在下次向該服務器發送請求時附帶這些數據,Cookie
通常被用來進行用戶會話管理(比如用戶的登錄狀態),保存用戶的一些信息。
2、在Flask中使用Cookie
在 Flask
中,如果想要在響應中添加一個 cookie
,可以使用 response
對象的set_cookie()
方法。
set_ cookie()方法的參數如下:
-
key
:cookie
鍵名 -
value
:cookie
值 -
max_age
:cookie
被保存的時間,單位:秒 -
expires
:具體的過期時間 -
path:限制
cookie
可用的路徑,默認為整個域名 -
domain
:cookie
可用的域名 -
secure
:設置為True
,只有通過 HTTPS 才可使用 -
httponly
:設置為True
,禁止客戶端 js 獲取cookie
具體使用如下:
1
2
3
4
5
6
7
8
9
|
@app .route( 'user/<name>' ) def user(name): response = make_response( 'hello {}' . format (name), 200 ) response.set_cookie( "name" , name) return response |
在 Flask
中,Cookie
可以通過 request
請求對象 cookies
屬性獲取。
1
2
3
4
5
6
7
8
9
10
11
|
@app .route( '/hello' ) def hello(): user = request.args.get( 'name' ) if not user: user = request.cookies.get( "name" , 'default' ) return 'Hello {}!' . format (user) |
二、session的使用
1、什么是session
session
指用戶會話,會話可以用來保存當前請求的一些狀態,以便于在請求之前共享信息。session是存儲在服務端的,通過唯一標識區分用戶 session,即 session id
,一般情況下,session id
是存在 Cookie
中的,服務端可以獲取 Cookie
中的 session id
來獲取用戶 session
。
2、Flask中的session對象
我們了解了 Cookie
最重要的功能是用來保存客戶端用戶的狀態信息。但是存在這樣一個問題,Cookie 是保存在客戶端的,在瀏覽器中可以輕易的添加和修改 Cookie
,而且如果把用戶的狀態信息以明文的方式存儲在 Cookie
里的話,那么就可以通過偽造 Cookie 信息來偽造別人的用戶信息,從而獲取一些權限。為了避免這個問題,我們要對敏感的 Cookie 內容進行加密。Flask 提供了 session
對象就是用來將 Cookie 數據加密存儲的。
3、在Flask中使用session
session
需要通過密鑰對數據進行簽名以加密數據,因此,需要先設置一個密鑰app.secret_key
,這里設置的密鑰只是一個簡單示例,在生產環境中,必須要隨機生成的密鑰,保證秘鑰的復雜度度和隨機性,才更安全。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 設置密鑰 app.secret_key = 'qwertyuiop' @app .route( '/user' , methods = [ 'POST' , 'GET' ]) def user(): if request.method = = 'POST' : user = request.form[ 'user_name' ] session[ 'user_name' ] = request.form[ 'user_name' ] return 'Hello {}!' . format (user) else : if 'user_name' in session: return 'Hello {}!' . format (session[ "user_name" ]) |
session
對象的使用就跟字典一樣,如上,用戶使用POST請求登錄后,在 session
中保存用戶名,下次再使用GET請求時,不傳遞任何信息,也可以在 session
中獲取該用戶的信息。
想要清除 session 指定信息的話,例如用戶名,可以使用 session.pop("user_name", None)
,清除全部的話可以使用session.clear()
。
到此這篇關于 Flask 入門系列 Cookie與session
的介紹的文章就介紹到這了,更多相關 Flask Cookie與session內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://juejin.cn/post/7030627770677854245