当前位置: 首页 > news >正文

Flask中的session

目录

Flask session概念:

session密钥的设置

测试代码

HTML

Flask

Falask session添加

Flask session获取

Flask session删除

执行结果

添加session再获取session后:

删除session再获取session后:

Flask session安全性问题

Flask session概念:

程序可以把数据存储在用户会话中,用户会话是“私有存储”,默认情况下session会保存在客户端的cookie中。

session是基于cookie实现,保存在服务端的键值对(形式为:{加密字符串:"data"}),同时在浏览器中保存了这个“加密字符串”用来再此请求的时候验证。

因此使用session时要设置一个密钥(加密字符串):“app.secret_key

session密钥的设置

session设置密钥一般来说有三种方法:

  • 手动指定session密钥,例如我想要这个密钥是“abcd”,那么可以写下如下代码:app.secret = abcd,该方法风险性高,优点是便于调试
  • 使用“app.secret = secrets.token_hex(16)生成随机的十六进制字符串作为密钥
  • 使用“app.secret = os.urandom(24)生成随机的二进制字符串作为密钥

在这里我们推荐使用第二种和第三种,并且定期更新密钥,防止数据泄露

测试代码

在这里,我们创建了一个简单的前端页面,并且添加了三个按钮,方便为下面的功能做说明

点击“添加session”按钮,服务端会创建一个:“session["test"] = this is test”的session

点击“获取session”按钮,服务端会返回session的值,前端用console.log()打印出这个值

点击“删除session”按钮,服务端会删除所有session

为方便大家测试,作者将HTML代码和Flask代码贴出,方便大家测试:

HTML

<!doctype html>
<html><head><title>测试</title><script src="/static/JavaScript/jquery-3.7.1.min.js"></script></head><body><button onclick="addSession()">添加session</button><button onclick="getSession()">获取session</button><button onclick="deleteSession()">删除session</button><script>function addSession(){$.ajax({url:"/add",type:"post",contentType:"application/json",data:JSON.stringify({type:"test",content:"this is test"})})}function getSession(){$.ajax({url:"/get",type:"get",success:function(res){console.log(res);}})}function deleteSession(){$.ajax({url:"/delete",type:"get"})}</script></body>
</html>

Flask

from flask import *
from os import urandomapp = Flask(__name__)
app.secret_key = urandom(24)@app.route("/")
def main():return render_template("ceshi.html")@app.route("/add",methods=["POST"])
def add():data = request.get_json()key = data["type"]value = data["content"]session[key] = valuereturn "success"@app.route("/get")
def get():return session.get("test")@app.route("/delete")
def delete():session.clear()return "success"if __name__ == "__main__":app.run(debug=True)

Falask session添加

添加session,可以直接使用:“session[key] = value”的形式添加

Flask session获取

操作session就像操作Python中的字典一样,我们可以使用session[key"]获取值,也可以使用session.get("key")获取值

  • value = session["key"]如果“key”不存在,将会抛出异常
  • value = session.get("key")如果“key”不存在,将返回None(推荐使用)

Flask session删除

  • 删除全部session:“session.clear()”
  • 删除某个session:“session.pop(ky)

执行结果

添加session再获取session后:

删除session再获取session后:

Flask session安全性问题

只是单纯设计密钥,并不足应对所有的安全问题,由于Flask框架自身的问题,cookie在客户端是可读的,这也就造成session可能会被破解,因此我们需要进一步提升session安全,在这里,作者给出一种通用的方法:

  • 首先pip安装“falsk_session”

 安装方法:

pip install flask_session

 添加如下代码:

from flask import *
from flask_session import Session
from os import urandomapp = Flask(__name__)app.secret_key = urandom(24)
app.config["SESSION_TYPE"] = 'filesystem'
Session(app)

这样session在客户端就会不可读,并且session是动态变化的,大大提高了安全性


http://www.mrgr.cn/news/10404.html

相关文章:

  • C# 使用RestSharp 开发WebApi client端,实现MES通信
  • 【漏洞复现】SuiteCRM responseEntryPoint Sql注入漏洞
  • mac安装java17(jdk17)
  • Spring Boot密码加密
  • Agent实际落地的应用 未来生活的无形助手
  • 基于改进YOLOv8的景区行人检测算法
  • 数据结构-串-了解串-串的基本操作
  • 信号的产生
  • SQL Server事务日志文件过大的处理方法
  • 计算机网络-数据链路层
  • Nginx反向代理B
  • DVWA靶场通关(CSRF)
  • 常用的接口测试的方法有哪些?接口测试质量评估的标准是什么?
  • 【初阶数据结构】顺序表与链表的比较(附题)
  • 链接 -- 动静态链接 --特点、区别、静态库安装下载
  • PyTorch踩坑记录1
  • 谷粒商城实战笔记-239-商城业务-购物车-ThreadLocal用户身份鉴别
  • 使用CORS解决跨域问题
  • springboot社区帮扶对象管理系统论文源码调试讲解
  • 如何了解SSL证书链情况?