1. Flask的Session概述
Flask提供了灵活可扩展性的Session支持,通过session,可以在服务器端保持和管理一个用户的状态信息。在Flask中,Session对象是由一个字典封装的对象,它可以储存各种不同类型的数据(如字符串、整数、对象等)和数据结构(如列表、字典等)。
1.1 什么是Session?
Web应用程序中,客户端和服务器端通常需要共享数据。每当客户端和服务器端之间发送请求和响应时,数据(或状态)被传递,通常以cookie的形式存储在客户端和服务器之间。而Session则是一种在服务器和客户端之间保存数据的方式,它允许在多个请求之间保持一些数据(如用户信息、购物车内容等)。
1.2 Flask Session的特点
Flask Session有以下特点:
灵活:可以存储多种类型的数据
安全:session数据存储在服务器端,客户端无法修改
可扩展性:可以轻松地扩展Session支持
自动:Session对象是自动创建的
2. Flask Session的安装
Flask Session默认没有安装,需要安装扩展库。最常用的是Flask-Session,顾名思义,它提供了Session支持的扩展。
pip install flask-session
3. Flask Session的用法
3.1 启用Session
在Flask中启用Session支持,需要在Flask应用中进行配置。Flask应用的配置存储在app.config字典中,可以通过配置对象或文件进行设置。
首先导入Session扩展:
from flask_session import Session
然后初始化Session扩展,将其与app实例绑定:
app = Flask(__name__)
#配置Session
app.config['SECRET_KEY'] = 'secret_key'
app.config['SESSION_TYPE'] = 'filesystem'
Session(app)
在这个例子中,我们配置了SESSION_TYPE为Filesystem,表示将Session数据存储在文件系统中。应该选择一个永久性的存储位置,例如/tmp目录或者在Linux服务器中的/var/run目录。
3.2 Session的基本用法
设置Session:
from flask import Flask, session
@app.route('/set_session')
def set_session():
session['username'] = 'jack'
return 'Session set!'
获取Session:
@app.route('/get_session')
def get_session():
username = session.get('username')
return 'username is ' + username
需要注意的一点是,如果访问不存在的Session,会得到一个'Requested unknown session'的错误。
3.3 Session的过期时间
Session默认情况下是永不过期的,但可以设置其过期时间。
将Session过期时间设置为10分钟:
app.permanent_session_lifetime = timedelta(minutes=10)
3.4 Session的销毁
可以通过session.pop(key)方法来删除Session中的值,也可以使用session.clear()方法来销毁整个Session。
删除一个键值:
@app.route('/pop_session')
def pop_session():
session.pop('username', None) #如果key不存在则返回None
return 'Session pop!'
清除所有会话:
@app.route('/clear_session')
def clear_session():
session.clear()
return 'Session cleared!'
4. Flask-Session的配置选项
Flask-Session支持多种配置选项,常用的配置选项包括:
4.1 SESSION_TYPE
可以设置不同的存储方式,例如:
redis
memcached
filesystem(默认)
不同的存储方式需要相应的配置信息,例如Redis存储要求Redis服务器、端口、密码等相关信息。
4.2 SESSION_COOKIE_NAME
Session的cookie的名称。默认为‘session’。
4.3 SESSION_COOKIE_DOMAIN
Session的cookie的域名。默认为None
4.4 SESSION_COOKIE_PATH
Session的cookie的路径。默认为‘/’
4.5 SESSION_COOKIE_HTTPONLY
设置Session的cookie不能被JavaScript访问。默认为True。
4.6 SESSION_COOKIE_SECURE
设置Session的cookie只能通过https协议发送。默认为False。
5. 总结
Session是Web应用程序中共享数据的最常用方式之一,Flask提供了简单而灵活的Session支持。在Flask中,Session由一个字典封装的对象,在服务器和客户端之间共享数据。Flask-Session是Flask中的Session支持扩展,提供了多种Session存储方式的实现。通过在Flask应用程序中的配置,可以轻松使用Session.