1. 程式人生 > >【Flask】Flask Cookie操作

【Flask】Flask Cookie操作

否則 timedelta 什麽 bsp gis time delet 主域名 res

### 什麽是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操作