Flask中的session

目录

[Flask session概念:](#Flask session概念:)

session密钥的设置

测试代码

HTML

Flask

[Falask session添加](#Falask session添加)

[Flask session获取](#Flask session获取)

[Flask session删除](#Flask session删除)

执行结果

添加session再获取session后:

删除session再获取session后:

[Flask 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

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

python 复制代码
from flask import *
from os import urandom

app = 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] = value
    return "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"

安装方法:

python 复制代码
pip install flask_session

添加如下代码:

python 复制代码
from flask import *
from flask_session import Session
from os import urandom

app = Flask(__name__)

app.secret_key = urandom(24)
app.config["SESSION_TYPE"] = 'filesystem'
Session(app)

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

相关推荐
Hgfdsaqwr20 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
开发者小天20 小时前
python中For Loop的用法
java·服务器·python
老百姓懂点AI21 小时前
[RAG实战] 向量数据库选型与优化:智能体来了(西南总部)AI agent指挥官的长短期记忆架构设计
python
喵手1 天前
Python爬虫零基础入门【第九章:实战项目教学·第15节】搜索页采集:关键词队列 + 结果去重 + 反爬友好策略!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·搜索页采集·关键词队列
Suchadar1 天前
if判断语句——Python
开发语言·python
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大1 天前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
喵手1 天前
Python爬虫零基础入门【第九章:实战项目教学·第14节】表格型页面采集:多列、多行、跨页(通用表格解析)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·表格型页面采集·通用表格解析
毕设源码-钟学长1 天前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
0思必得01 天前
[Web自动化] 爬虫之API请求
前端·爬虫·python·selenium·自动化
莫问前路漫漫1 天前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程