Flask开发(十七)Flask数据交互 Session的使用

内容纲要

 

本篇导读:

  • Session的基本配置
  • Session的基本使用

Session是基于Cookie实现的,保存在服务端的键值对中。同时,在浏览器的Cookie中也对应一个相同的随机字符串,用来再次请求时的验证。

Session是储存在服务器中的,Cookie是储存在本地浏览器中的,而Flask的Session是基于Cookie,Session是经过加密储存在Cookie中。

Session的基本配置

因为Flask的Session是通过加密之后放到了Cookie中。有加密就有密钥用于解密,所以,用到了Flask的Session模块就一定要配置SECRET_KEY这个全局宏。一般将SECRET_KEY设置为24位的字符。我们可以自己定义一个随机字符串,也可以引入os模块中,自动产生一个24位的随机字符串函数。这种方法有个不足之处,就是服务器每次启动之后这个SECRET_KET的值是不一样的,会造成Session验证失效,用户只有重新登陆。

Session的基本使用

1.设置session

设置Session主要是通过session['name']='value'的方式来完成,name代表的是变量名称,value代表的是变量的值。

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

@app.route('/')
def set_session():
    session['username']='zhangsan'
    renturn 'Session设置成功'

需要导入相应的模块:from flask import Flask,session

2.获取Session的值

获取Session的值有两种方式,这里推荐使用第二种方法:

  • result=session['name'] :如果内容不存在,将会报异常
  • result=session.get('name') 如果内容不存在,将会返回None
@app.route('/')
def get_session():
    username=session.get('username') 
    return username or 'Session为空'

3.删除Session的值或清空Session所有值

删除单个Session的值,可以使用Session.pop('key')这个方法,如果清除多个Session的值,可以使用Session.clear方法。

@app.route('/del_session')
def get_session():
    session.pop('username')
    # session.clear()
    return 'Session被删除'

4.设置Session的过期时间

如果没有指定session的过期时间,那么默认是浏览器关闭后就会自动结束,即关闭浏览器失效。session.permanent=True在Flask下则可以将有效期延长至一个月。下面的方法可以配置session具体有多少天的有效期。

  • 如果设置了session的permanent的属性为True,那么过期啥时间为31天。
  • 可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间。

在实际项目中,经常有需求设置session的过期时间是3天,10天,20天该如何来设置?以下代码演示了如何将session的过期时间具体设置为几天:

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=3)

@app.route('/')
def set_session():
    session['username'] = 'zhangsan'
    session.permanent = True
    return 'Session设置成功'

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

 

代码清单:

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)

@app.route('/')
def set_session():
    session['username'] = 'zhangsan'
    session.permanent = True
    return 'Session设置成功'

@app.route('/get_session')
def get_session():
    username = session.get('username')
    return username or 'Session为空'

@app.route('/del_session')
def del_session():
    session.pop('username')
    #session.clear()
    return 'session被删除'

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

 

阅读剩余
THE END