Flask--session

flask-session

  • 机制
  • 客户端进行第一次请求时,服务端创建session,并把敏感数据经过加密后放入session
  • 请求结束时,再把session存放到response的cookie中返回给客户端,客户端保存cookie
  • 下次请求的时候,服务器从浏览器发送过来的cookie中读取session,然后再从session中读取敏感数据并进行解密,获取最终的用户数据。
  • 优点
  • 服务器不做存储,节省空间
  • 经过加密,相对俺去啊

session操作

  • session操作
  • session变量需要从flask导入,且全局共享(包括html)
  • 使用session需要设置SECRET_KEY加密,一般使用os.urandom(24)方式随机加密
  • 操作session的时候,跟操作字典是一样的。
    • 添加sessionsession['username']
    • 删除:session.pop('username')或者del session['username']
    • 清除所有sessionsession.clear()
    • 获取sessionsession.get('username')
  • session过期时间:
  • 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
  • 如果app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7),那么就过期时间是7天
  • 如果设置了session.permanent=True,那么过期时间是31天。但过期会自动刷新获取新的session,意味着永不不过期,其他过期时间配置也失效

案例Code

  • session操作
from flask import Flask,session, render_template
import os
from datetime import timedelta

app = Flask(__name__)
# 设置密码加密方式
app.config['SECRET_KEY'] = os.urandom(24)
    
# 设置session过期时间
# 同时配置session.permanent = True这个值过期会自动刷新获取
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)


@app.route('/<username>')
def index(username):
    session['username'] = username
    return render_template('session.html')


@app.route('/delete/')
def delete():
    print(session.get('username'))
    session.pop('username')
    print(session.get('username'))
    return render_template('session.html')

@app.route('/clear/')
def clear():
    print(session.get('username'))
    # 删除session中的所有数据
    session.clear()
    print(session.get('username'))
    return render_template('session.html')



if __name__ == '__main__':
    app.run(debug=True)
<body>
    <div>
        {{ session.username | default("游客") }}
    </div>
</body>
  • session控制查看权限
from flask import Flask, request, session, abort
import os



app = Flask(__name__)

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


@app.route('/')
def index():
	# 判断session中name值,不为None时可以操作
    if not session.get('name'):
        abort(401)  
    return 'Hello World'


@app.route('/login')
def login():
    name = request.args.get('name')
    pwd = request.args.get('pwd') 
    if name == 'zhangsan' and pwd == '123456':
    	# 登陆成功后设置session中name值 
        session['name'] = name 
        return '登陆成功'
    return '用户名或密码错误'


@app.route('/logout')
def logout():
	# 退出并删除session中name值 
    session.pop('name', None)
    return '退出成功'
    


if __name__ == '__main__':
    app.run(debug=True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值