zoukankan      html  css  js  c++  java
  • http的会话控制

    所谓的会话,就是客户端浏览器和服务端网站之间一次完整的交互过程.

    会话的开始是在用户通过浏览器第一次访问服务端网站开始.

    会话的结束时在用户通过关闭用户上网的访问代理以后,与服务端断开.

    所谓的会话控制,就是在客户端浏览器和服务端网站之间,进行多次http请求响应之间,记录、跟踪和识别用户的信息而已。

     

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

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

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

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

    实现状态保持主要有两种类型:

    • 在客户端存储信息使用url,Cookietoken令牌[jwt.csrf,oauth]

    • 在服务器端存储信息使用Session

     

    cookie

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

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

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

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

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

    设置,获取,删除cookie

    from flask import Flask,make_response,request
    
    app = Flask(__name__)
    
    @app.route("/set_cookie")
    def set_cookie():
        """设置cookie"""
        response = make_response("ok")
        # response.set_cookie(key="变量名",value="变量值",max_age="有效时间/秒")
        response.set_cookie("username","xiaoming",100)
        """如果cookie没有设置过期时间,则默认过期为会话结束过期"""
        """cookie在客户端中保存时,用一个站点下同变量名的cookie会覆盖"""
        response.set_cookie("age","100")
    
        return response
    
    @app.route("/get_cookie")
    def get_cookie():
        """获取cookie"""
        print(request.cookies)
        print(request.cookies.get("username"))
        print(request.cookies.get("age"))
        """打印效果:
        {'username': 'xiaoming'}
        """
        return ""
    
    @app.route("/del_cookie")
    def del_cookie():
        """删除cookie"""
        response = make_response("ok")
        #把对应名称的cookie设置为过期时间,则可以达到删除cookie
        response.set_cookie("username","",0)
        return response
    
    if __name__ == '__main__':
        app.run(debug=True)

    session

     

     

    from flask import Flask, make_response, request,session
    
    app = Flask(__name__)
    
    class Config():
        SECRET_KEY = "123456asdadad"    #加秘钥
        DEBUG = True    #打开测试开发模式
    
    app.config.from_object(Config)
    
    # 查看当前flask默认支持的所有配置项
    print(app.config)
    
    @app.route("/set_session")
    def set_session():
        """设置session"""
        """与cookie不同,session支持python基本数据类型作为值"""
        session["username"] = "xiaohuihui"
        session["info"] = {
            "age":11,
            "sex":True,
        }
    
        return "ok"
    
    @app.route("/get_session")
    def get_session():
        """获取session"""
        print( session.get("username") )
        print( session.get("info") )
        print( app.session_cookie_name )
        return "ok"
    
    @app.route("/del_session")
    def del_session():
        """删除session"""
        try:
            del session["username"]
            # session.clear() # 删除所有
        except:
            pass
        return "ok"
    
    if __name__ == '__main__':
        app.run(debug=True)
  • 相关阅读:
    做汉堡
    作业三 读《构建之法》
    一个程序员的生命周期--有感
    阅读《构建之法》第13-17章
    阅读<构建之法>10、11、12章
    阅读《构建之法》第8,9,10章
    测试与封装5.2-5.3
    作业5 四则运算 测试与封装 5.1
    阅读5-7章
    做汉堡
  • 原文地址:https://www.cnblogs.com/zhangjiahao996/p/14008110.html
Copyright © 2011-2022 走看看