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需要通过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重新赋值即可。

     

  • 相关阅读:
    leetcode-----5. 最长回文子串
    leetcode-----4. 寻找两个正序数组的中位数
    leetcode-----3. 无重复字符的最长子串
    leetcode-----2. 两数相加
    leetcode-----1. 两数之和
    leetcode-----第 26 场双周赛
    leetcode-----104. 二叉树的最大深度
    leetcode-----103. 二叉树的锯齿形层次遍历
    leetcode-----102. 二叉树的层序遍历
    数据管理必看!Kendo UI for jQuery过滤器的全球化
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/13302231.html
Copyright © 2011-2022 走看看