• 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需要通过flask的Response响应对象来进行设置,由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)
    
    
    
        需要先set cookie 再进行get cookie

    注意:

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

    二.Session

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

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

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

    1.设置session

    rom 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重新赋值即可。

     

  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/13302231.html
Copyright © 2020-2023  润新知