1. cookie的使用
1.設置cookie(django 的cookie是通過responser來存放的,flask也是)
response = make_response(render_template('index.html'))
response.set_cookie('key', 'value')
2.查詢cookie:
user_name = request.cookies.get('user_name')
3.刪除cookie:
response.delete_cookie('key')
注意:Flask服務器默認設置cookie有效期為關閉瀏覽器后cookie失效
參數:
key, 鍵
value='', 值
max_age=None, 超時時間 cookie需要延續的時間(以秒為單位)如果參數是\ None`` ,這個cookie會延續到瀏覽器關閉為止
expires=None, 超時時間(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie可以被任何url的頁面訪問,瀏覽器只會把cookie回傳給帶有該路徑的頁面,這樣可以避免將cookie傳給站點中的其他的應用。
domain=None, Cookie生效的域名 你可用這個參數來構造一個跨站cookie。如, domain=".example.com"所構造的cookie對下面這些站點都是可讀的:www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。如果該參數設置為 None ,cookie只能由設置它的站點讀取
secure=False, 瀏覽器將通過HTTPS來回傳cookie
httponly=False 只能http協議傳輸,無法被JavaScript獲取(不是絕對,底層抓包可以獲取到也可以被覆蓋
1.2設置Cookie過期時間
1.基於max_age參數設置cookie有效期:
resp = Response('設置cookie給瀏覽器')
resp.set_cookie('user_name', 'mark',max_age=60)
2.基於expires參數設置cookie有效期:
再設置cookie的調用set_cookie()時候傳入關鍵字實參 expires= 值,這個值代具體的過期時間,一個datetime對象或UNIX時間戳。
使用expires參數,就必須會用格林尼治時間(也就是相對北京時間少8個小時,因為瀏覽器會默認把服務器傳來的時間值當做標准格林尼治時間,並根據當地的時區做調整
resp = Response('設置cookie給瀏覽器, cookie設置過期時間為一個月后')
expires = datetime.now()+timedelta(days=30, hours=16)
resp.set_cookie('user_name', 'mark', expires=expires)
2 session的使用
from flask import session
使用前必須要設置app.config['SECRET_KEY'] = xxxxxxxxxxxxxxxxxxxxxxx
1.設置
session['key']=value
2.取
session['key']
3.刪除
session對象調用pop(key)可以根據具體的session的key清除掉指定的session信息。
session對象調用clear()可以清除此次請求的瀏覽器關於本域名的所有session信息
2.2 session過期時間
后端Flask跟瀏覽器交互默認情況下,session cookie會在用戶關閉瀏覽器時清除。通過將session.permanent屬性設為True可以將session的有效期延長為31天,也可以通過操作app
的配置PERMANENT_SESSION_LIFETIME
來設置session
過期時間
1. session['userphone'] = '123456'
session.permanent = True
2. app 配置 通過設置PERMANENT_SESSION_LIFETIME指定具體的過期時間
from datetime import timedelta
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=1) # 設置為1小時候過
3. flask-session
作用:將默認保存的簽名cookie中的值 保存到 redis/memcached/file/Mongodb/SQLAlchemy
安裝:pip3 install flask-session
使用1:
from flask import Flask,session
from flask_session import RedisSessionInterface
import redis
app = Flask(__name__)
conn=redis.Redis(host='127.0.0.1',port=6379)
#use_signer是否對key簽名
app.session_interface=RedisSessionInterface(conn,key_prefix='lqz')
@app.route('/')
def hello_world():
session['name']='lqz'
return 'Hello World!'
if __name__ == '__main__':
app.run()
使用2:
from redis import Redis
from flask.ext.session import Session
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = Redis(host='1127.0.0.1',port='6379')
Session(app)
問題:設置cookie時,如何設定關閉瀏覽器則cookie失效。
response.set_cookie('k','v',exipre=None)#這樣設置即可
#在session中設置
app.session_interface=RedisSessionInterface(conn,key_prefix='lqz',permanent=False)
#一般不用,我們一般都設置超時時間,多長時間后失效
問題:cookie默認超時時間是多少?如何設置超時時間
#源碼expires = self.get_expiration_time(app, session)
'PERMANENT_SESSION_LIFETIME': timedelta(days=31),#這個配置文件控制