官方文档

Flask-Session是Flask的一个扩展,它为应用程序添加了对服务器端会话的支持。

  • 安装
    • pip install Flask-Session

快速入门

基本上,对于拥有一个Flask应用程序的常见用途,您只需创建Flask应用程序,加载所选配置,然后通过将其传递给应用程序来创建Session对象。

会话实例不用于直接访问,您应该始终使用flask.session

from flask import Flask, session
from flask.ext.session import Session

app = Flask(__name__)
# Check Configuration section for more details
SESSION_TYPE = 'redis'
app.config.from_object(__name__)
Session(app)

@app.route('/set/')
def set():
    session['key'] = 'value'
    return 'ok'

@app.route('/get/')
def get():
    return session.get('key', 'not set')

您也可以使用init_app()方法设置您的应用程序:

sess = Session()
sess.init_app(app)

配置

Flask-Session存在以下配置值。Flask- session从Flask应用程序配置中加载这些值,因此在将应用程序传递给Flask- session之前,应该先配置应用程序。注意,在应用init_app之后,这些值不能被修改,所以请确保在运行时不修改它们。

我们不提供像SESSION_REDIS_HOST和SESSION_REDIS_PORT这样的东西,如果您想使用RedisSessionInterface,您应该将SESSION_REDIS配置为您自己的redis.Redis实例。这给了你更多的灵活性,就像你可能想使用相同的redis.Redis实例也用于缓存,那么您不需要保留两个redis.Redis实例在同一进程中。

下面的配置值是Flask本身内与会话相关的内置配置值。它们都可以被Flask-Session理解,例如,您应该使用PERMANENT_SESSION_LIFETIME来控制您的会话生存期。

SESSION_COOKIE_NAME 会话cookie的名称
SESSION_COOKIE_DOMAIN 会话cookie的域。如果没有设置此属性,则cookie对SERVER_NAME的所有子域都有效。
SESSION_COOKIE_PATH 会话cookie的路径。如果没有设置此cookie,则cookie将对所有APPLICATION_ROOT有效,如果没有设置为’/’,则cookie将对所有APPLICATION_ROOT有效。
SESSION_COOKIE_HTTPONLY控制是否应该使用httponly标志设置cookie。默认值为True。
SESSION_COOKIE_SECURE控制是否应使用安全标志设置cookie。默认值为False。
PERMANENT_SESSION_LIFETIME永久会话asdatetime的生命周期。timedelta对象。从Flask0.8开始,这也可以是一个表示秒的整数。

一个配置键列表也可以被扩展理解:

SESSION_TYPE指定要使用的会话接口的类型。内置的会话类型:
null: NullSessionInterface (default)
redis: RedisSessionInterface
memcached: MemcachedSessionInterface
filesystem: FileSystemSessionInterface
mongodb: MongoDBSessionInterface
sqlalchemy: SqlAlchemySessionInterface
SESSION_PERMANENT 无论是否使用永久会话,默认为True
SESSION_USE_SIGNER 无论是否签署会话cookie sid,如果设置为True,就必须设置flask.Flask.secret_key,默认为False
SESSION_KEY_PREFIX 在所有会话键之前添加的前缀。这使得为不同的应用程序使用相同的后端存储服务器成为可能,默认为“session:”
SESSION_REDIS一个redis.Redis 实例,默认连接到127.0.0.1:6379
SESSION_MEMCACHED一个memcache.Client实例, 默认连接到127.0.0.1:11211
SESSION_FILE_DIR 存储会话文件的目录。默认使用当前工作目录下的flask_session目录。
SESSION_FILE_THRESHOLD会话开始删除某些项之前存储的最大项数,默认为500
SESSION_FILE_MODE会话文件需要的文件模式,默认为0600
SESSION_MONGODB一个pymongo.MongoClient 实例, 默认连接到 127.0.0.1:27017
SESSION_MONGODB_DB 要使用的MongoDB数据库,默认为“flask_session”
SESSION_MONGODB_COLLECT要使用的MongoDB集合,默认为“session”
SESSION_SQLALCHEMY一个flask.ext.sqlalchemy.SQLAlchemy实例其数据库连接URI使用SQLALCHEMY_DATABASE_URI 参数
SESSION_SQLALCHEMY_TABLE要使用的SQL表的名称,默认为“sessions”

基本上,您只需要配置SESSION_TYPE。

请注意:默认情况下,Flask-Session中的所有非空会话都是永久的。

内置的会话接口

NullSessionInterface

如果没有配置不同的SESSION_TYPE,则将使用它生成更好的错误消息。将允许只读访问空会话,但设置失败。

RedisSessionInterface

使用Redis键值存储作为会话后端。(redis-py需要)

相关配置值:

  • SESSION_REDIS

MemcachedSessionInterface

使用Memcached作为会话后端。(需要pylibmc或memcache)

  • SESSION_MEMCACHED

FileSystemSessionInterface

使用werkzeug.contrib.cache.FileSystemCache 作为会话后端。

MongoDBSessionInterface

使用 MongoDB 作为会话后端。 (pymongo需要)

  • SESSION_MONGODB
  • SESSION_MONGODB_DB
  • SESSION_MONGODB_COLLECT

SqlAlchemySessionInterface

使用SQLAlchemy作为会话后端。(Flask-SQLAlchemy需要)

  • SESSION_SQLALCHEMY
  • SESSION_SQLALCHEMY_TABLE

API

class flask.ext.session.Session(app=None)

该类用于向一个或多个Flask应用程序添加服务器端会话。

有两种使用模式。一个是用一个非常具体的Flask应用程序初始化实例:

app = Flask(__name__)
Session(app)

第二种是创建对象一次,然后配置应用程序:

sess = Session()

def create_app():
    app = Flask(__name__)
    sess.init_app(app)
    return app

默认情况下,Flask-Session将使用NullSessionInterface,您确实应该配置您的应用程序来使用不同的SessionInterface。

请注意:您不能直接使用Session实例,Session所做的只是更改Flask应用程序上的session_interface属性。

init_app(app)

这用于为app对象设置会话。

参数:app -配置正确的Flask app对象。

class flask.ext.session.sessions.ServerSideSession(initial=Nonesid=Nonepermanent=None)

  • 用于基于服务器端的会话的基类。
  • sid
    • Session id,在内部,我们使用uuid.uuid4()来生成一个会话id。 你可以用  session.sid.访问它

class flask.ext.session.NullSessionInterface

class flask.ext.session.RedisSessionInterface(rediskey_prefixuse_signer=Falsepermanent=True)

  • 使用Redis键值存储作为会话后端。
  • 参数:
    • redis – 一个redis.Redis 实例
    • key_prefix – 添加到所有Redis存储键的前缀。
    • use_signer – 是否对会话id cookie签名。
    • permanent – 是否使用 永久会话 。

class flask.ext.session.MemcachedSessionInterface(clientkey_prefixuse_signer=Falsepermanent=True)

  • 使用memcached作为后端的会话接口。
  • 参数
    • client – 一个memcache.Client 实例
    • key_prefix – 添加到所有Memcached存储键的前缀。
    • use_signer – 是否对会话id cookie签名 .
    • permanent – 是否使用永久会话。

class flask.ext.session.FileSystemSessionInterface(cache_dirthresholdmodekey_prefixuse_signer=Falsepermanent=True)

  • 使用werkzeug.contrib.cache.FileSystemCache作为会话后端。
  • 参数
    • cache_dir – 存储会话文件的目录。
    • threshold – 会话在开始删除某些项之前存储的最大项数。
    • mode – 会话文件需要的文件模式,默认为0600
    • key_prefix –添加到FileSystemCache存储键的前缀。
    • use_signer – 是否对会话id cookie签名。
    • permanent – 是否使用永久会话。

class flask.ext.session.MongoDBSessionInterface(clientdbcollectionkey_prefixuse_signer=Falsepermanent=True)

  • 使用mongodb作为后端的会话接口。
  • 参数
    • client – 一个pymongo.MongoClient 实例
    • db – 你想使用的数据库
    • collection – 您要使用的集合。
    • key_prefix – 添加到所有MongoDB存储键的前缀。
    • use_signer – 是否对会话id cookie签名。
    • permanent – 是否使用永久会话。

class flask.ext.session.SqlAlchemySessionInterface(appdbtablekey_prefixuse_signer=Falsepermanent=True)

  • 使用flask应用程序中 Flask-SQLAlchemy 作为会话后端
  • 参数
    • app – 一个Flask应用程序实例
    • db – 一个Flask-SQLAlchemy 实例.
    • table – 你想使用的数据表名
    • key_prefix – 添加到所有存储键的前缀。
    • use_signer – 是否对会话id cookie签名。
    • permanent – 是否使用永久会话。

发表回复