码迷,mamicode.com
首页 > 其他好文 > 详细

flask——session

时间:2019-11-07 14:47:41      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:上下文   hello   操作方法   nbsp   怎么   介绍   lap   手机   自己的   

一·、什么是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重新保存-->>

 

flask——session

标签:上下文   hello   操作方法   nbsp   怎么   介绍   lap   手机   自己的   

原文地址:https://www.cnblogs.com/tyl23/p/11809557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!