zoukankan      html  css  js  c++  java
  • flask——session

    一·、什么是session?

    在解析 session 的实现之前,我们先介绍一下 session 怎么使用。session 可以看做是在不同的请求之间保存数据的方法,因为 HTTP 是无状态的协议,但是在业务应用上我们希望知道不同请求是否是同一个人发起的。比如张三,王二都在自己的手机上用淘宝购物,将想购买的商品放入购物车中,当王二,张三结账时,不能将他俩的购物车混淆了,服务器区分和保存购物车数据的方法就是session。

    flask的session是基于cookie的会话保持。简单的原理即:

    当客户端进行第一次请求时,客户端的HTTP request(cookie为空)到服务端,服务端创建session,视图函数根据form表单填写session,请求结束时,session内容填写入response的cookie中并返回给客户端,客户端的cookie中便保存了用户的数据。

    当同一客户端再次请求时, 客户端的HTTP request中cookie已经携带数据,视图函数根据cookie中值做相应操作(如已经携带用户名和密码就可以直接登陆)。

    在 flask 中使用 session 也很简单,只要使用 from flask import session 导入这个变量,在代码中就能直接通过读写它和 session 交互。

    from flask import Flask, session, escape, request
     
    app = Flask(__name__)
    app.secret_key = 'please-generate-a-random-secret_key'
     
     
    @app.route("/")
    def index():
        if 'username' in session:
            return 'hello, {}\n'.format(escape(session['username']))
        return 'hello, stranger\n'
     
     
    @app.route("/login", methods=['POST'])
    def login():
        session['username'] = request.form['username']
        return 'login success'
     
     
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000, debug=True)
    View Code

    session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证;

    注意 :Flask中的session是存在浏览器中  默认key是session(加密的cookie), 也可以像Django一样基于上述的方式实现保存在数据库

    1 flask中 session的基本概念

    lask 有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥

     同 reqeust 一样 session 基于上下文管理

    本质是字典,具有字典的操作方法

    设置:session['username'] = 'xxx'
        删除:session.pop('username', None)

    大概流程:

    class SecureCookieSessionInterface(SessionInterface):
    
            open_session --> 打开,获取 app.session_cookie_name获取加密的session(没有的话会创建)
                                          然后进行解密
    
            save_session  --> 对操作完的sesison进行加密 保存

    session的超时时间如何配置:

    app.config['SESSION_COOKIE_NAME'] = ''
    
        'SESSION_COOKIE_NAME':                  'session',    # 默认
        'SESSION_COOKIE_DOMAIN':                None,
        'SESSION_COOKIE_PATH':                  None,
        'SESSION_COOKIE_HTTPONLY':              True,
        'SESSION_COOKIE_SECURE':                False,
        'SESSION_REFRESH_EACH_REQUEST':         True,
        'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),

    2 flask中 session的流程详解

     

     

     

    刚进来创建 request_context 对象(request,初始化session(最开始为空))-->>

    当接收到用户请求之后,会调用 Flask对象的 session_interface对象的open_session方法,以此来获取一个session对象。-->>

    数据返回给用户,并且把内容中的session重新保存-->>

  • 相关阅读:
    SQL SERVER 查看sql语句性能与执行时间
    SQL SERVER 一组数据按规律横着放置,少则补空,如人员按一进一出的规律,进出为一组,缺少的补null
    SQL SERVER 子查询使用Order By;按In排序
    SQL SERVER 字符拆分列为多行
    SQL SERVER 字符合并多行为一列
    SQL SERVER pivot(行转列),unpivot(列转行)
    ASP.NET ViewState详解
    数字签名
    ASP.NET Form身份验证方式详解
    细说进程、应用程序域与上下文之间的关系
  • 原文地址:https://www.cnblogs.com/tyl23/p/11809557.html
Copyright © 2011-2022 走看看