cookie:在網站中,http請求是無狀態的。也就是說即便第一次和服務器鏈接後而且登陸成功後,第二次請求服務器依然不能知道當前請求是哪一個用戶。cookie的出現就是爲了解決這個問題,第一次登陸後服務器返回一些數據(cookie)給瀏覽器,而後瀏覽器保存在本地,當該用戶發送第二次請求的時候,就會把上次請求存儲的cookie數據自動的攜帶給服務器,服務器經過瀏覽器攜帶的數據就能判斷當前是哪一個用戶了。cookie存儲的數據量有限,不一樣的瀏覽器有不一樣的存儲大小,但通常不超過4kb。所以使用cookie只能存儲一些小量的數據。flask
session:session和cookie的做用有點相似,都是爲了存儲用戶相關的信息。不一樣的是,cookie是存儲在本地瀏覽器,而session存儲在服務器。存儲在服務器的數據會更加安全,不容易被竊取。但存儲在服務器也有必定的弊端,就是會佔用服務器的資源,但如今服務器已經發展至今,存儲一些session信息仍是綽綽有餘的。瀏覽器
cookie和session結合使用:cookie和session的使用已經出現了一些很是成熟的方案。通常有兩種存儲方式安全
設置cookie:應該在Response的對象上設置。flask.Response對象上有一個set_cookie方法,能夠經過這個方法來設置cookie信息。服務器
from flask import Flask,request,Response app = Flask(__name__) @app.route('/') def hello_world(): resp = Response("服務器返回信息") #設置cookie, resp.set_cookie('username','derek') return resp if __name__ == '__main__': app.run()
參數介紹:源碼cookie
def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None):
刪除cookie,經過Response.delete_cookie方法,指定cookie的key,就能夠刪除cookie了session
@app.route('/del/') def delete_cookie(): resp = Response("刪除cookie") #設刪除cookie, resp.delete_cookie('username') return resp
參數解釋:app
代碼以下:dom
@app.route('/') def hello_world(): resp = Response("設置cookie") # 1.使用expires參數,就必須使用格林尼治時間 # 經過expires參數設置有效期的時候,就要相對北京時間少8個小時,全部這裏hours是16, # 若是直接days=31,就不許確了 expires = datetime.now() + timedelta(days=30,hours=16) resp.set_cookie('username','derek',expires=expires) # 2.使用max_age參數設置過時時間(1分鐘後後期) # resp.set_cookie('username','derek',max_age=60) return resp
flask操做sessionide
代碼以下:網站
from flask import Flask,session import os from datetime import timedelta app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) #自定義設置session的有效期 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=2) @app.route('/') def index(): # 設置session session['username'] = 'derek' # permanent:過時時間,默認爲false,若是設置爲True,則默認爲31天以後過時 # 能夠經過app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=2) # 來自定義過時時間,這樣設置後,session.permanent = True的session有效期則爲兩個小時 session.permanent = True return 'Hello World!' @app.route('/get_session/') def get_session(): #獲取session username = session.get('username') # derek return username @app.route('/delete_session/') def delete_session(): #刪除session session.pop('username') #刪除指定的session # session.clear() #刪除全部session return '刪除成功' if __name__ == '__main__': app.run(debug=True)