Flask - Session

本文详细探讨了Flask框架中的Session对象,包括源码分析、基本使用方法和与g对象的区别。同时,介绍了flask-session插件,它是对Flask内部Session的扩展,支持将Session保存在Redis等不同位置,以增强灵活性。文中提到了基于RedisSessionInterface和flask.ext.session的两种使用方式,并讲解了如何设置Session的过期时间和cookie行为。
摘要由CSDN通过智能技术生成

目录

一、Flask内部Session对象源码分析

二、Session的基本使用方式 - Flask - 官方文档阅读 - 基础总结

三、g对象 - Flask内部给予的全局变量

3-1 基本使用

3-2 g对象和session的区别

四、flask-session - 基于Flask框架对session的二次封装,为第三方模块

4-1 使用方式一、基于RedisSessionInterface对象实现

4-2 使用方式二、基于 flask.ext.session 的 Session对象

4-2-1 设置cookie时,设定关闭浏览器则cookie失效

4-2-2 设置超时时间


一、Flask内部Session对象源码分析

总结:Session对象本质需要实现open_session和save_session方法

    def open_session(self, app, request):
        s = self.get_signing_serializer(app)
        if s is None:
            return None
        val = request.cookies.get(app.session_cookie_name)
        if not val:
            return self.session_class()
        max_age = total_seconds(app.permanent_session_lifetime)
        try:
            data = s.loads(val, max_age=max_age)
            return self.session_class(data)
        except BadSignature:
            return self.session_class()

    def save_session(self, app, session, response):
        domain = self.get_cookie_domain(app)
        path = self.get_cookie_path(app)

        # If the session is modified to be empty, remove the cookie.
        # If the session is empty, return without setting the cookie.
        if not session:
            if session.modified:
                response.delete_cookie(
                    app.session_cookie_name,
                    domain=domain,
                    path=path
                )

            return

        # Add a "Vary: Cookie" header if the session was accessed at all.
        if session.accessed:
            response.vary.add('Cookie')

        if not self.should_set_cookie(app, session):
            return

        httponly = self.get_cookie_httponly(app)
        secure =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值