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重新保存-->>

  • 相关阅读:
    我藏在你的心里,你却不愿意寻找# BUG躲猫猫
    阴间需求之跨端登录
    神奇的props
    map与filter:你先我先?
    阴间BUG之动态路由刷新几率回首页
    阴间BUG之动态路由添加失败
    我在eltable就变了个模样,请你不要再想我,想起我
    SCP打包部署方法
    indexOf 与 includes
    YACC和BISON学习心得
  • 原文地址:https://www.cnblogs.com/tyl23/p/11809557.html
Copyright © 2011-2022 走看看