### session:
1. session的基本概念:session和cookie的作用有點類似,都是為了存儲用戶相關的信息。不同的是,cookie是存儲在本地瀏覽器,session是一個思路、一個概念、一個服務器存儲授權信息的解決方案,不同的服務器,不同的框架,不同的語言有不同的實現。雖然實現不一樣,但是他們的目的都是服務器為了方便存儲數據的。session的出現,是為了解決cookie存儲數據不安全的問題的。
2. session與cookie的結合使用:
* session存儲在服務器端:服務器端可以采用mysql、redis、memcached等來存儲session信息。原理是,客戶端發送驗證信息過來(比如用戶名和密碼),服務器驗證成功后,把用戶的相關信息存儲到session中,然后隨機生成一個唯一的session_id,再把這個session_id存儲cookie中返回給瀏覽器。瀏覽器以后再請求我們服務器的時候,就會把這個session_id自動的發送給服務器,服務器再從cookie中提取session_id,然后從服務器的session容器中找到這個用戶的相關信息。這樣就可以達到安全識別用戶的需求了。
* session存儲到客戶端:原理是,客戶端發送驗證信息過來(比如用戶名和密碼)。服務器把相關的驗證信息進行一個非常嚴格和安全的加密方式進行加密,然后再把這個加密后的信息存儲到cookie,返回給瀏覽器。以后瀏覽器再請求服務器的時候,就會自動的把cookie發送給服務器,服務器拿到cookie后,就從cookie找到加密的那個session信息,然后也可以實現安全識別用戶的需求了。
### flask操作session:
1. 設置session:通過`flask.session`就可以操作session了。操作`session`就跟操作字典是一樣的。`session['username']='zhiliao'`。
2. 獲取session:也是類似字典,`session.get(key)`。
3. 刪除session中的值:也是類似字典。可以有三種方式刪除session中的值。
* `session.pop(key)`。
* `del session[key]`。
* `session.clear()`:刪除session中所有的值。
4. 設置session的有效期:如果沒有設置session的有效期。那么默認就是瀏覽器關閉后過期。如果設置session.permanent=True,那么就會默認在31天后過期。如果不想在31天后過期,那么可以設置`app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hour=2)`在兩個小時后過期。
1 # coding:utf-8 2 from flask import Flask, session 3 from datetime import timedelta 4 import os 5 6 app = Flask(__name__) 7 app.config['SECRET_KEY'] = os.urandom(24) 8 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=5) 9 10 11 @app.route('/') 12 def hello_world(): 13 session['username'] = 'saber' 14 # session permanent 持久化置為True則session課保存31天. 15 session.permanent = True 16 return 'Hello World!' 17 18 19 @app.route('/get_session/') 20 def get_session(): 21 username = session.get('username') 22 return username or u'no session set' 23 24 25 @app.route('/delete_session/') 26 def delete_session(): 27 # clear session 'username' 28 session.pop('username') 29 # clear all session. 30 session.clear() 31 return 'delete success.' 32 33 34 35 if __name__ == '__main__': 36 app.run(debug=True)
