Flask06,cookie,session,flask-session


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),#這個配置文件控制

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM