向Quart应用程序添加服务器端会话支持
Quart-Session的Python项目详细描述
夸脱会议
{1美元^ 1}
Quart Session是Quart的扩展,它添加了对 应用程序的服务器端会话。在
基于flask-session。在
快速入门
Quart Session可以通过pipenv或pip安装
$ pipenv install quart-session $ pip install quart-session
并且需要Python3.7.0或更高版本。一个相当小的夸脱会话示例是
^{pr2}$特点
Redis支持
通过aioredis
。在
app=Quart(__name__)app.config['SESSION_TYPE']='redis'Session(app)
如果您已经有一个aioredis.Client
实例,并且希望共享
它有会话接口
app=Quart(__name__)app.config['SESSION_TYPE']='redis'@app.before_servingasyncdefsetup():cache=awaitaioredis.create_redis_pool(...)app.config['SESSION_REDIS']=cacheSession(app)
默认情况下,Quart session创建一个到Redis的连接,而 上面的示例设置了一个连接池。在
三元组支持
Quart Session附带an (experimental) Redis client,用于Trio事件循环。在
fromquart_trioimportQuartTriofromquart_session.redis_trio.clientimportRedisTrioapp=QuartTrio(__name__)app.config['SESSION_TYPE']='redis'Session(app)
Memcached支持
通过aiomcache
。在
app=Quart(__name__)app.config['SESSION_TYPE']='memcached'Session(app)
JSON序列化程序
flask-session使用pickle
对于会话数据,而Quart session使用a JSON serializer
能够序列化常见的JSON类型,以及:Tuple
,Bytes
,
Markup
、UUID
和{
JSON作为会话数据允许与其他 可能希望直接读取会话数据的程序/语言 从后端。在
如果出于某种不神圣的原因,您更喜欢pickle
或您自己的序列化程序
app=Quart(__name__)app.config['SESSION_TYPE']='redis'Session(app)try:importcPickleaspickleexceptImportError:importpickleapp.session_interface.serialize=pickle
后端使用
在任何时候,您都可以直接与会话后端交互:
@app.route("/")asyncdefhello():cache=app.session_interfaceawaitcache.set("random_key","val",expiry=3600)data=awaitcache.get("random_key")
接口将有get
、set
和delete
方法(不管
后端-类似于aiocache的工作方式)。在
性能
flask-session集 每个传入请求的会话,包括静态文件。从经验来看, 这通常会给底层会话基础设施带来不必要的负载, 尤其是在交通拥挤的环境中。在
Quart Session只在会话更改(或创建)时与后端联系。此外,
静态文件服务从不发出Set-Cookie
头。如果您想启用
但是,将SESSION_STATIC_FILE
设置为True
。在
会话固定
将用户的会话与他/她的IP地址相关联。这减少了通过XSS等窃取cookie的行为,而且非常方便 对于需要额外安全性的web应用程序。在
app=Quart(__name__)app.config['SESSION_TYPE']='redis'app.config['SESSION_PROTECTION']=TrueSession(app)
来自不同IP的会话重用现在将导致创建新会话,并删除旧会话。在
Important:如果应用程序位于反向代理之后,则
很可能提供X-Forwarded-For
头,您必须使用它
通过显式地将SESSION_REVERSE_PROXY
设置为True
。在
未来发展
MongoDBSessionInterface
FileSystemSessionInterface
- ^{cd22}
- Pytest公司
烧瓶会议
这个库的工作原理与flask-session非常相似。 具体变更如下:
- Quart Session不会对每个请求发出
Set-Cookie
。在 - Quart Session在静态文件服务上不发出
Set-Cookie
。在 - Quart Session使用不同的序列化程序:
quart.json.tag.TaggedJSONSerializer
而不是{}。在 - Quart Session不允许客户端提供自己的
sid
cookie值。在 - Quart Session可以做会话保护。在
- Quart Session可能还没有实现所有的后端接口,例如“filesystem”。在
帮助
在gitter上找到夸脱族或打开一个问题。在
许可证
BSD公司
- 项目
标签: