向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类型,以及:TupleBytesMarkupUUID和{}。在

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")

接口将有getsetdelete方法(不管 后端-类似于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不允许客户端提供自己的sidcookie值。在
  • Quart Session可以做会话保护。在
  • Quart Session可能还没有实现所有的后端接口,例如“filesystem”。在

帮助

gitter上找到夸脱族或打开一个问题。在

许可证

BSD公司

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
并行处理java。util。同时发生的叉子在游泳池里。常见的并行性准则,用于选择正确的并行度大小   java如何将空白字符追加到指定长度?   安卓应用程序中出现错误,SSLHandshakeException,找不到证书路径的信任锚点   java如何使用JUnit Mockito验证检查方法是否未被调用   java如何使用不同的@RequestMapping解析多个控制器中的静态页面   Selenium中的javascript需要验证搜索结果   访问数据库SQLiteopenHelper方法时java应用程序崩溃(nullpointerexception)   在二叉树中验证最小堆时出现java空指针异常   Java 7的SSL连接失败   java用RestEasyWebTarget替换ProxyFactory不起作用   在Java应用程序中单击“否”按钮后,数组程序冻结(无响应)   数组中的前缀Java初学者前进和   Java HTML解析器,包括脚本标记和LineNumberReader   在java中为长类型数字加前导零   正则表达式无法映射正则表达式java。lang.IllegalArgumentException:模式段中捕获组的数量