Cookie是存储在客户端的,而Session是存储在服务端的,也可以将Session称为服务端的Cookie.因为Cookie和Session的使用方式都和字典一样,通过key存储和获取值。
服务端会为每一个客户端浏览器创建一个Session对象。也就是说,客户端浏览器不仅仅可以在本地将数据保存在Cookie中,还可以将大量的数据存储到服务端的Session对象中。
在flask中使用Session需要如下几步:
- 导入flask模块中的session变量
- 在设置Session时将session.permanent属性设为True
- 设置app.secret_key,用于保存到客户端的Session-Cookie-id加密
- 通过app.permanent_session_lifetime属性设置Session的有效期
实例:创建三个路由用于模拟登陆和注销的过程
flask_session.py
from flask import Flask,request,session
from datetime import *
app=Flask(__name__)
#用于显示登陆状态的根路由
@app.route('/')
def index():
#如果Session中有username,表明已经登陆
if 'username' in session:
return '已经登陆 %s' % session['username']
return '未登陆'
#用于登陆的/login路由
@app.route('/login')
def login():
session.permanent=True
#直接通过GET请求的username字段指定用户名
#并将用户名以Key为username的形式保存到Session对象中
session['username']=request.args.get('username')
return '登陆成功'
#注销登陆状态的/logout路由
@app.route('/logout')
def logout():
#将username从Session对象中弹出
session.pop('username',None)
return '注销成功'
#设置用于加密的key
app.secret_key='geekori.com'
#设置session的有效期(20s)
app.permanent_session_lifetime=timedelta(seconds=20)
if __name__=="__main__":
app.run()
运行程序,浏览器输入http://localhost:5000
使用http://localhost:5000/login?username=Sandra
然后再访问http://localhost:5000,会在浏览器显示已经登陆和登陆用户名为Sandra
当使用http://localhost:5000/logout注销登陆后,再访问http://localhost:5000,会显示未登陆的信息。由于过期时间是20s,所以即使不注销登陆,过20s后,再访问,仍然是显示未登陆的信息。