Flask - Cookie的使用
Flask - Cookie的使用
使用者使用瀏覽器第一次訪問服務端時,服務端生成cookie,放在響應response裡返回,並儲存在使用者瀏覽器裡.
from flask
import Flask,make_response
@app.route(
'/set/<name>')
def
set_cookie
(name):
response = make_response(redirect(url_for(
'hello')))
response.set_cookie(
'name',name)
# set_cookie檢視會在生成的響應報文首部中建立一個Set-Cookie欄位,即"Set-Cookie: name=xxx;Path=/"
return response
使用者下次訪問同一個服務端時,會在header裡攜帶已儲存的cookie.
from flask
import Flask,
request
@app.route(
'/')
@app.route(
'/hello')
def hello():
name = request.args.
get(
'name') #如果查詢引數裡沒有name值則從cookie獲取
if name
is None:
name = request.cookies.
get(
'name',
'Human') #從Cookie中獲取name值
return
'<h1>Hello,%s</h1>' % name
因為使用者可以直接修改瀏覽器的cookie值,冒用他人賬戶,所以直接使用cookie是不安全的.
Flask提供了session物件用來將Cookie資料加密儲存.(預設情況下,它會把資料儲存在瀏覽器上一個名為session的cookie裡)
app.secret_key = 'secret string' #設定金鑰
更安全的做法是把金鑰寫進系統環境變數(在命令列中使用export或set命令),或是儲存在.env檔案中
SECRET_KEY=secret string
然後在程式指令碼中使用os模組提供的getenv()方法獲取:
app.secret_key = os.getenv('SECRET_KEY','secret string') #第二個引數是作為沒有獲取到對應環境變數時使用的預設值`
#結合使用
@app.route(
'/login')
def login():
session[
'logged_in'] = True
#寫入session. 向session中新增一個名為logged_in的cookie,將它的值設為True.
#使用session物件新增cookie時,資料會使用程式的金鑰對其進行簽名,加密後的資料儲存在一塊名為session的cookie裡. 使用者可以看到加密後的值,但無法修改它,一旦資料被修改,簽名的值也會變化,這樣在讀取時會驗證失敗,對應的session值也會隨之失效.
return redirect(url_for(
'hello'))
@app.route(
'/hello')
def hello():
name = request.args.
get(
'name')
if name
is None:
name = request.cookies.
get(
'name',
'Human')
response =
'<h1>Hello, %s!</h1>' % name
#session中的資料可以像字典一樣透過鍵讀取,或是使用
get()方法.
if
'logged_in'
in session: #根據使用者認證狀態返回不同的內容.
response +=
'[Authenticated]'
else:
response +=
'[Not Authenticated]'
return response
登出使用者的賬戶,實際操作其實就是把代表使用者認證的logged_in cookie刪除,透過session物件的pop方法實現.
from flask
import session
@app.route(
'/logout')
def
logout
():
if
'logged_in'
in session:
session.pop(
'logged_in')
return redirect(url_for(
'hello'))
預設情況下,session cookie會在使用者關閉瀏覽器時刪除.
透過將session.permanent屬性設定為True可以將session的有效期延長為Flask.permanent_session_lifetime屬性值對應的datetime.timedelta物件.
也可以透過配置變數PERMANENT_SESSION_LIFETIME設定,預設為31天.
儘管session物件會對Cookie進行簽名並加密,但這種方式僅能夠確保session的內容不會被篡改,加密後的資料藉助工具仍然可以輕易讀取(即時不知道金鑰),所以絕對不能在session中儲存使用者密碼等敏感資訊.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2711729/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flask(11)- 操作 CookieFlaskCookie
- flask框架中的cookie和sessionFlask框架CookieSession
- python flask 設定cookiePythonFlaskCookie
- Python Flask,cookie,設定、獲取、刪除cookiePythonFlaskCookie
- Flask——路由的使用Flask路由
- Flask——模板的使用Flask
- jQuery的Cookie使用jQueryCookie
- cookie與session的使用CookieSession
- Gin(八):cookie的使用Cookie
- flask:flask模板——使用Jinja2Flask
- Flask中本地棧的使用Flask
- Flask:sqlalchemy模組的使用FlaskSQL
- js-cookie.js的使用JSCookie
- 如何獲取Cookie並使用Cookie侵入Cookie
- day93:flask:Cookie&Session&請求鉤子&捕獲錯誤&上下文&Flask-ScriptFlaskCookieSession
- Flask(9)- 藍圖的基本使用Flask
- Laravel 之 Cookie 使用LaravelCookie
- Flask——模型的使用及增刪改Flask模型
- flask-maple使用文件Flask
- Flask——配置格式及使用Flask
- flask框架安裝使用Flask框架
- python web開發-flask中日誌的使用PythonWebFlask
- localStorage,sessionStorage和cookie的區別及使用SessionCookie
- cookie的使用方法以及注意事項Cookie
- npm包:js-cookie的簡單使用NPMJSCookie
- flask 外掛使用方法Flask
- 使用Flask-Avatars在Flask專案裡設定頭像Flask
- flask非同步資料交換celery的使用Flask非同步
- 使用Flask-Dropzone在Flask程式中實現檔案上傳Flask
- Flask 使用Jinja2模板引擎Flask
- 使用Flask開發簡單介面Flask
- ASP.NET MVC下使用AngularJs語言(七):Cookie的使用ASP.NETMVCAngularJSCookie
- 3、爬蟲-selenium-獲取使用者cookie的使用爬蟲Cookie
- [譯]使用Laravel訪問前端CookieLaravel前端Cookie
- 新增cookie、刪除cookie、清除cookieCookie
- 使用 flask 構建我的 wooyun 漏洞知識庫Flask
- flask中使用jsonify和json.dumps的區別FlaskJSON
- 介面測試--apipost中cookie管理器的使用APICookie