Flask—session

版权声明:此博客出自HuQi,感谢您的转载 https://blog.csdn.net/JSYhq/article/details/88617527

一、Flask中session介绍

1. 定义

        session是基于cookie实现的,保存在服务端的键值对(形式 {随机字符串:'xxxxx'}),同时在浏览器中的cookie里也对应一个相同的随机字符串,用来再次请求的时候验证;

        Flask中的session是存在浏览器中,默认key是session(加密的cookie),也可以像Django一样基于上述的方式实现保存在数据库。Flask中session保存在内存。

二、Flask中session使用

1. 配置SECRET_KEY

        因为Flask的session是通过加密之后放到了cookie中,所以有加密就有密钥解密。只要用到了Flask的session模块,就一定要配置"SECRET_KEY"这个全局宏。一般设置为24位的字符。

from flask import Flask, session

app = Flask(__name__)

# 方法一
app.config['SECRET_KEY'] = 'xxx' # 可自定义,可使用随机数[os.urandom(24)]
# 方法二
app.secret_key = 'why would I tell you my secret key?'

2. 操作session

from flask import Flask, session, request
import os

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)

# 设置session
@app.route('/')
def set():
    # 设置"字典"键值对(正式开发时,值需要session.get('user')获取);使用用户名作为session值
    session['username'] = request.form.get('username')

    return 'success'

if __name__ = "__main__":
    app.run()

3. 读取session

@app.route('/get/')
 def get():
     # session['username']
     # session.get('username')

     return session.get('username')

 if __name__ == '__main__':
     app.run()

备注:
    (1)result = session[‘key’] :如果内容不存在,将会报异常
    (2)result = session.get(‘key’) :如果内容不存在,将返回None(推荐用法)

4. 删除session

@app.route('/delete')
def delete():
    session.pop('username', None)
    # 或者
    session['username'] = False
    
    return 'success'

if __name__ == '__main__':
     app.run()

5. 清除session

@app.route('/clear')
def clear():
    # 清除session中所有数据
    session.clear

    return 'success'

if __name__ == '__main__':
     app.run()

6. 设置session过期时间

1. 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
2. 如果设置了session的permanent属性为True,那么过期时间为31天
3. 可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间,这个值的数据类型是
   datetime.timedelay类型
案例1:在登录网页界面,下面有一个“记住我”选项,如果点击了则设置session的有效期长一点
就是设置这个

# 1. 设置session有效期永久
@app.route('/')
def set():
    session['username'] = 'life'
    session.permanent = True # 长期有效,一个月时间
    
    return 'success' 
案例2:配置有效期7天,此方式更先进

1. 步骤分析
    (1)引入包:from datetime import timedelta
    (2)配置有效期:app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
    (3)设置:session.permanent = True

2. 代码实现
    from flask import Flask,session
    from datetime import timedelta
    import os 

    app = Flask(__name__)
    app.config['SECRET_KEY'] = os.urandom(24)
    app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 

    # 设置session
    @app.route('/')
    def set():
        session['username'] = 'liefyuan'
        session.permanent = True

        return 'success'

猜你喜欢

转载自blog.csdn.net/JSYhq/article/details/88617527