Flask学习笔记(5):session
在计算机中,尤其是在网络应用中,Session被称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
session有多种存储方式:
1、存储在客户端,将客户端发过来的验证信息比如用户名和密码通过某种加密方式加密后,以cookie的键值对的方式返回给客户端,其中key为session,值即为一串加密的字符。下次访问时带上这个cookie。这种方式可以在一定程度上保护客户端的cookie数据信息的安全性。
2、存储在服务端,将客户端发过来的验证信息等保存在服务端(包括数据库),并生成一个对应的session_id,作为cookie返回给客户端。
flask内置session的实方式就是将session以cookie的形式保存在客户端。代码如下:
1 from flask import Flask, session, escape, request,render_template 2 import os 3 from datetime import timedelta 4 app = Flask(__name__) 5 # app.secret_key = 'please-generate-a-random-secret_key' 6 app.config['SECRET_KEY'] = os.urandom(24) 7 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=1) # 设置有效期为1小时,此时下面的31天失效 8 @app.route("/") 9 def index(): 10 if 'username' in session: 11 return 'hello, {},您是登录状态\n'.format(escape(session.get("username"))) 12 return '您尚未登录\n' 13 @app.route("/login", methods=['GET','POST']) 14 15 def login(): 16 if request.method == "POST": 17 session['username'] = request.form['username'] 18 # 设置session时自动设置cookie,其中key为session,value为加密后的一串字符 19 session.permanent = True # 设置cookie有效期为31天 20 return "您已登录" 21 else: 22 if 'username' in session:# 已经登录则不必重复登录 23 return "您已登录" 24 return render_template('login2.html') 25 26 @app.route("/del_session") 27 def del_session(): 28 session.pop("username") # 同字典操作 29 # session.clear() # 清空所有session 30 return "删除了cookie中的session" 31 32 if __name__ == '__main__': 33 app.run()
前端访问:
flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如redis,MongoDB,sqlalchemy等,那是后话。