• Flask中的session机制


    cookie和session
    cookie:网站中,http请求是无状态的,第一次和服务器连接后并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是解决了改问题,第一次登陆后服务器返回数据(cookie是存储数据的一种格式)给浏览器,然后浏览器保存到本地,用户第二次请求的时候,就会携带cookie数据自动携带给服务器,服务器通过浏览器携带的数据就能判断当前用户。cookie存储数据有限,不同浏览器不同的存储大小,但一般不超过4kb,因此cookie只能存储小量数据。
    session:session与cookie类似,都是存储用户相关信息,不同的是cookie存储在本地浏览器,session存储在服务器,存储在服务器的数据会更安全。但是存储在服务器会占用服务器的资源。
    cookie和session的结合使用:
    存储在服务端:通过cookie存储一个session_id,具体数据保存在session(存储数据的方式)中。用户如果已经登陆服务器会在cookie中保存一个session_id,下次请求的时候会把sessin_id携带上来,服务器根据session_id在session库中获取用户的session数据,就可以知道用户是谁。专业术语叫:sever side session
    flask中将session数据加密,存储在cookie中,专业术语叫client side session。flask采用的就是这个方式。
    flask中的session
    flask中的session机制是:把敏感数据加密后放入session中,然后把session存放到cookie中,下次请求的时候,从浏览器发来的cookie中读取session,再从session中读取敏感数据,并进行解密,来获取用户数据
    flask的这种session机制,可以节省服务器的开销,因为把所有的信息都存储到了客户端。
    安全是相对的,把session放到cookie中,经过加密也是比较安全的。
    flask中使用cookie和session
    cookies:在flask中操作cookie,通过response对象来操作,可以在response返回之前,通过response.set_cookie来设置。

    key:设置的cookie的key
    value:key对应的value
    max_age:改cookie的过期时间,如果不设置,浏览器关闭就会过期
    expires:过期时间,应该是datetime类型
    domain:该cookie在哪个域名中有效,一般设置子域名。
    path:该cookie在哪个路径下有效
    session:flask中的session是通过 from flask import session。然后添加key和value进去就可以。并且,flask中的session机制是将session信息加密,然后存储在cookie中。专业术语叫client side session

    操作session
    session的操作:
    使用session需要从flask中导入session,以后所有和session相关的操作都是通过这个变量来的。
    使用session需要设置SECRET_KEY,用来作为加密用的,并且这个SECRET_KEY在每次启动服务器后都变化的话,之前的session就不能通过SECRET_KEY来解密
    操作session和操作字典一样。
    添加session['username']
    删除session.pop()
    清除所有session.clear()
    获取session.get()
    设置session的过期时间
    没有制定session的过期时间,默认是浏览器关闭就自动结束。
    设置了session的permanent属性为True,那么过期时间是31天
    可以通过给app.config设置PERMANENT_SESSION_LEFTTIME来更改时间,这个值的数据类型是datetime.timedelta类型

    import os
    from datetime import timedelta
    import config
    
    app = Flask(__name__)
    # app.config.from_object(config)
    app.config['SECRET_KEY'] = os.urandom(24)  # 做加密用的,加密一般是加密算法或者加盐
    app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
    
    # 添加数据到session中
    # 操作session的时候,跟操作字典一样
    # SECRET_KEY
    
    
    @app.route('/')
    def hello_world():
        session['username'] = 'hubo'
        # 不指定session的过期时间,默认是浏览器关闭就结束
        session.permanent = True    # 默认时间是一个月
        return 'Hello World!'
    
    
    @app.route('/get/')
    def get():
        return session.get('username')
    
    
    @app.route('/delete/')
    def delete():
        print(session.get('username'))
        session.pop('username')
        print(session.get('username'))
        return 'success'
    
    
    @app.route('/clear')
    def clear():
        print(session.get('username'))
        session.clear()
        print(session.get('username'))
        return 'success'
    
    
    if __name__ == '__main__':
        app.run(debug=True)
  • 相关阅读:
    解题报告:POJ1852 Ants
    解题报告:POJ2573 Bridge(分析建模)
    POJ 3321 Apple Tree(树状数组模板)
    PAT1139 First Contact
    POJ3259 SPFA判定负环
    HDOJ2586 最近公共祖先模板
    树的直径与最近公共祖先
    字符数组_随机存储
    青鸟资料下载
    软件测试(4)_LoadRunner使用
  • 原文地址:https://www.cnblogs.com/zxy6/p/11792462.html
Copyright © 2020-2023  润新知