zoukankan      html  css  js  c++  java
  • Flask学习之 会话控制

    会话控制

    所谓的会话,就是用户和浏览器中网站之间一次交互过程.

    会话的开始是在用户打开浏览器以后第一次访问网站.

    会话的结束时在用户关闭浏览器以后.

    因为 http 是一种无状态协议,浏览器请求服务器是无状态的。

    无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。

    无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象。

    有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等

    实现状态保持主要有两种方式:

    在客户端存储信息使用`Cookie,本地存储,token[jwt,oauth]`

    在服务器端存储信息使用`Session`,redis

    一.Cookie

    Cookie是由服务器端生成,发送给客户端浏览器,浏览器会将Cookiekey/value保存,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookiekey/value可以由服务器端自己定义。

    使用场景: 登录状态, 浏览历史, 网站足迹,购物车 [不登录也可以使用购物车]

    Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用

    Cookie基于域名安全,不同域名的Cookie是不能互相访问的

    如访问baidu.com时向浏览器中写了Cookie信息,使用同一浏览器访问souhu.com时,无法访问到baidu.com写的Cookie信息

    浏览器的同源策略针对cookie也有限制作用.

    当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息。

    1.设置cookie

    设置cookie需要通过flaskResponse响应对象来进行设置,flask内部提供了一个make_response函数给我们可以快速创建响应对象

    from flask import Flask, make_response
    app = Flask(__name__)
    
    
    @app.route("/set_cookie")
    def cookie_demo():
        response = make_response("make a cookie")
        # response.set_cookie("变量名", "变量值", max_age="有效期几秒")
        response.set_cookie("username", "zero", max_age=20)
        return response
    
    if __name__ == '__main__':
        app.run(port=5000, host='0.0.0.0', debug=True)

    2.获取cookie

    from flask import Flask
    from flask import request
    app = Flask(__name__)
    
    
    
    
    @app.route('/get_cookie')
    def resp_cookie():
        resp = request.cookies.get('username')
        return resp
    
    if __name__ == '__main__':
        app.run(port=5000, host='0.0.0.0', debug=True)

    如果没有先生产cookie,直接获取会报错。

    二.Session

    对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息

    在服务器端进行状态保持的方案就是`Session`

    注意: **Session依赖于Cookie**,而且flask中使用session,需要配置SECRET_KEY选项,否则报错.

    1.设置session

    from flask import Flask
    from flask import session
    
    app = Flask(__name__)
    
    
    # 声明一个配置类
    class Config(object):
        SECRET_KEY = "DD434O7HQ2131!@#edn#hu!@!g@uWO1NS"
    
    
    # 加载配置
    app.config.from_object(Config)
    
    
    @app.route('/set_session')
    def set_session():
        session['username'] = 'one'
        return 'set session ok!'
    
    
    @app.route('/get_session')
    def get_session():
        return session.get('username')
    
    
    if __name__ == '__main__':
        app.run(port=5000, host='127.0.0.1', debug=True)

    2.获取session

    删除一个session设置值为None,修改一个session重新赋值即可。

  • 相关阅读:
    环境是如何建立的 启动文件有什么
    环境中存储的是什么
    串行 并行 异步 同步
    TPC-H is a Decision Support Benchmark
    进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道
    删除环境变量
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/13288659.html
Copyright © 2011-2022 走看看