zoukankan      html  css  js  c++  java
  • 07flask中session及cookie的用法。

    一,基本概念。

    1,session的概念。

    session和cookie的作用有点类似,都是为了存储用户相关的信息。不
    同的是,cookie是存储在本地浏览器,而session是存储在服务器。存
    储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有
    一定的弊端,就是会占用服务器的资源,但现在服务器发展至今,一些
    session信息还是绰绰有余的。


    使用session的好处:
    1,敏感数据不是直接发送回浏览器,而是发送回一个“session_id”,服
    务器将“session_id”和敏感数据做一个映射存储在“session”(在服务器)
    中,更加安全。
    2,“session”可以设置过期时间,也从另外一方面保证了用户的账号安全。

    2,cookie的概念。

    在网站中,http请求是无状态的。也就是说即使第一次和服务器连接
    后并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个
    用户。cookie的出现就是为了解决这个问题,第一次登陆后服务器返
    回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户
    发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自
    动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户
    是哪个了。cookie存储的数据量有限,不停的浏览器有不同的存储大
    小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

    
    

    3,session及cookie结合使用。

    cookie和session结合使用:
    web发展至今,cookie和session的使用已经出现了一些非常成熟的方案。
    在如今的市场或者企业里,一般有两种存储方式。
    1,存储在服务器:通过cookie存储一个session_id,然后具体的数据则
    是保存在session中。如果用户已经登录,则服务器会在cookie中保存一
    个session_id,下次再次请求的时候,会把该session_id携带上来,服务
    器根据session_id和session库中获取用户的session数据。就能知道用户
    到底是谁,以及之前保存的一些状态信息。这种专业术语叫做sever side
    session。
    2,将session数据加密,然后存储在cookie中。这种专业术语叫做client
    side session。flask采用的就是这种方式,但是也可以替换成其他形式。

    4,flask中session及cookie的不同。

    flask中session工作机制(和上述概念有点区别):
    1,把敏感数据经过加密后放入“session”中,然后再把“session”存放在“
    cookie” 中,下次请求的时候,再从浏览器发送过来的“cookie”中读取
    “session”,然后再从“session”中读取敏感数据,并进行解密,获取最终的
    用户数据。
    2,“session”可以设置过期时间,也从另外一方面保证了账号安全。
    3,安全是相对的,把“session”放在“cookie”中,经过加密,也是比较安全的。

    二,具体操作

    1,session写入。session的设置和字典一样,注意:记住设置SECRET_KEY,它的作用相当于“盐”

    from flask import Flask,session
    import config
    
    app = Flask(__name__)
    app.config.from_object(config)
    
    @app.route('/')
    def hello_world():
        session['username'] = "zhiliao"
        return 'Hello World!'
    
    
    if __name__ == '__main__':
        app.run()
    
    
    
    
    
    import os
    SECRET_KEY =os.urandom(24)

    经过运行后,结果为:内容经过SECRET_KEY撒盐后变为一长串东西。

    2,session读取。

    # 读取session
    @app.route('/get/')
    def get():
        # 两种方法
        # 1,session['username']
        # 2,session.get('username')
        return session.get('username')

     

    3,session删除

    @app.route('/')
    def hello_world():
        session['username'] = "zhiliao"
        return 'Hello World!'
    
    # 读取session
    @app.route('/get/')
    def get():
        # 两种方法
        # 1,session['username']
        # 2,session.get('username')
        return session.get('username')
    
    @app.route('/delete/')
    def de():
        print(session.get('username'))
        session.pop('username')
        return "sss"

    注意:先执行http://127.0.0.1:5000/才会先生成session,后面才能删除(执行http://127.0.0.1:5000/delete/

    不然没有session怎么删。

    4,清除session中的所有键值对。

    @app.route('/clear/')
    def clear():
        print(session.get('username'))
        session.clear()  #嗲括号
        print(session.get('username'))
        return "aaa"

    三,设置过期时间。

    @app.route('/')
    def hello_world():
        session['username'] = "zhiliao"
        session.permanent = True
        return 'Hello World!'

    不设置的话关掉网页就没了,设置永久的话最长为一个月时间。

    常规的天数设置:

    from flask import Flask,session
    import config
    from datetime import timedelta
    
    app = Flask(__name__)
    app.config.from_object(config)
    app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)  #2
    
    @app.route('/')
    def hello_world():
        session['username'] = "zhiliao"
        session.permanent = True  #这句话不加的话就不会执行#2代码
        return 'Hello World!'

  • 相关阅读:
    我再也不相信正解了……
    悬线法
    防线 Defence
    奶牛浴场
    环状两段最大子段和
    三步必杀
    加工生产调度
    种树
    UVA11134 传说中的车 Fabled Rooks
    UVA 11054 Gergovia的酒交易 Wine trading in Gergovia
  • 原文地址:https://www.cnblogs.com/two-peanuts/p/10741155.html
Copyright © 2011-2022 走看看