Cookie是客戶端的會話技術 cookie本身由瀏覽器保存,通過Response將cookie寫到瀏覽器上,下一次訪問,瀏覽器會根據不同的規則攜帶cookie過來 特點: - 客戶端會話技術,瀏覽器的會話技術 - 數據全都是存儲在客戶端中 - 存儲使用的鍵值對結構進行的存儲 - 特性 - 支持過期時間 - 默認會自動攜帶本網站的所有cookie - 根據域名進行cookie存儲 - 不能跨域名 - 不能跨瀏覽器 - Cookie是通過服務器創建的Response來創建的 設置cookie:
response.set_cookie(key,value[,max_age=None,exprise=None)]
response.set_cookie(key,value[,max_age=None,exprise=None)] max_age: 整數,指定cookie過期時間 expries: 整數,指定過期時間,可以指定一個具體日期時間 max_age和expries兩個選一個指定 獲取cookie: request.cookies.get(key) 刪除cookie response.delete_cookie(key)
例子:用cookie實現登陸和注銷
登錄頁前端:
<h3>首頁</h3> <a href="{{ url_for('app.login') }}">登錄</a> # url_for('藍圖名.函數名')
<form action="{{ url_for('app.handler') }}" methon="GET"> 用戶名:<input type="text" name="username" ><br> 密碼:<input type="password" name="password" ><br> <input type="submit" value="登錄"><br> </form>
后端接收,並用response設置cookie返回給瀏覽器:
@blue.route('/login_handler') def login_handler(): if request.method == 'GET': username = request.args.get('username') password = request.args.get('password') if username == 'lili' and password == 123456: response = redirect(url_for('app.index'))
# 這里設置一下cookie response.set_cookie('user',username,max_age=7*24*3600) return response else: return '登錄失敗'
登錄后,cookie檢測:
@blue.route('/index/') def index(): #渲染不到可以給個空值. username = request.cookie.get('user','') #渲染到前端 return render_template('index.html', username=username)
前端接收參數並渲染:
<h3>首頁</h3> {% if username %} <p>{{ username }}:歡迎您<a href="">注銷</a></p> {% else %} <a href="{{ url_for('app.login') }}">登錄</a> {% endif %}
注銷相關藍圖,cookie刪除:
@blue.route('/logout/') def logout(): response = redirect(url_for('app.index')) #通過response刪除cookie里的'user' response.delete_cookie('user') return response