【Flask】Flask Cookie操作
### 什麽是cookie:
在網站中,http請求是無狀態的。也就是說即使第一次和服務器連接後並且登錄成功後,第二次請求服務器依然不能知道當前請求是哪個用戶。
cookie的出現就是為了解決這個問題,第一次登錄後服務器返回一些數據(cookie)給瀏覽器,然後瀏覽器保存在本地,
當該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器通過瀏覽器攜帶的數據就能判斷當前用戶是哪個了。
cookie存儲的數據量有限,不同的瀏覽器有不同的存儲大小,但一般不超過4KB。因此使用cookie只能存儲一些小量的數據。
1. cookie有有效期:服務器可以設置cookie的有效期,以後瀏覽器會自動的清除過期的cookie。
2. cookie有域名的概念:只有訪問同一個域名,才會把之前相同域名返回的cookie攜帶給服務器。也就是說,訪問谷歌的時候,不會把百度的cookie發送給谷歌。
### flask操作cookie:
1. 設置cookie:設置cookie是應該在Response的對象上設置。`flask.Response`對象有一個`set_cookie`方法,可以通過這個方法來設置`cookie`信息。
在Chrome瀏覽器中查看cookie的方式:
* 右鍵->檢查->Network->重新加載頁面->找到請求,然後查看Response Headers中的cookie
* 點擊url輸入框左邊的信息icon,然後找到相應的域名,再展開查看cookie。
* 在Chrome的設置界面->高級設置->內容設置->所有cookie->找到當前域名下的cookie。
2. 刪除cookie:通過`Response.delete_cookie`,指定cookie的key,就可以刪除cookie了。
###Flask 設置/刪除 cookie
1 from flask import Flask, request, Response 2 3 app = Flask(__name__) 4 5 6 @app.route(‘/‘) 7 def hello_world(): 8 resp = Response("saber‘s home") 9 resp.set_cookie(‘username‘, ‘saber‘) 10 return resp 11 12 13 @app.route(‘/del/‘) 14 def delete_cookie():15 resp = Response("Saber‘s home 2") 16 resp.delete_cookie(‘username‘) 17 return resp 18 19 if __name__ == ‘__main__‘: 20 app.run(debug=True)
######. 設置cookie的有效期:
* max_age:以秒為單位,距離現在多少秒後cookie會過期。
* expires:為datetime類型。這個時間需要設置為格林尼治時間,也就是要距離北京少8個小時的時間。
* 如果max_age和expires都設置了,那麽這時候以max_age為標準。
* max_age在IE8以下的瀏覽器是不支持的。expires雖然在新版的HTTP協議中是被廢棄了,但是到目前為止,所有的瀏覽器都還是能夠支持,所以如果想要兼容IE8以下的瀏覽器,那麽應該使用expires,否則可以使用max_age。
* 默認的過期時間:如果沒有顯示的指定過期時間,那麽這個cookie將會在瀏覽器關閉後過期。
1 from flask import Flask, request, Response 2 from datetime import datetime, timedelta 3 4 app = Flask(__name__) 5 6 7 @app.route(‘/‘) 8 def hello_world(): 9 resp = Response("saber‘s home") 10 # resp.set_cookie(‘username‘, ‘saber‘, max_age=60) 11 # resp.set_cookie(‘username‘, ‘saber‘, expires=datetime(2018, 4, 19, 14, 0, 0)) 12 expires = datetime.now() + timedelta(days=30, hours=16) 13 resp.set_cookie(‘username‘, ‘saber‘, expires=expires) 14 return resp 15 16 if __name__ == ‘__main__‘: 17 app.run(debug=True)
#### 設置cookie有效域名
cookie默認是只能在主域名下使用。如果想要在子域名下使用,那麽應該給`set_cookie`傳遞一個`domain=‘.hy.com‘`,這樣其他子域名才能訪問到這個cookie信息。
1 from flask import Flask, request, Response 2 from datetime import datetime, timedelta 3 from cmsviews import bp 4 5 app = Flask(__name__) 6 app.register_blueprint(bp) 7 app.config[‘SERVER_NAME‘] = ‘hy.com:5000‘ 8 9 10 @app.route(‘/‘) 11 def hello_world(): 12 resp = Response("saber‘s home") 13 # resp.set_cookie(‘username‘, ‘saber‘, max_age=60) 14 # resp.set_cookie(‘username‘, ‘saber‘, expires=datetime(2018, 4, 19, 14, 0, 0)) 15 resp.set_cookie(‘username‘, ‘saber‘, domain=‘.hy.com‘) 16 return resp 17 18 if __name__ == ‘__main__‘: 19 app.run(debug=True)
【Flask】Flask Cookie操作