[flask]cookie的基本使用/

news2024/11/16 10:48:14

彻底理解 Cookie - 知乎 (zhihu.com)

是什么

cookie是当你浏览某个网站的时候,由web服务器存储在你的机器硬盘上的一个小的文本文件。它其中记录了你的用户名、密码、浏览的网页、停留的时间等等信息。当你再次来到这个网站时,web服务器会先看看有没有它上次留下来的cookie。如果有的话,会读取cookie中的内容,来判断使用者,并送出相应的网页内容,比如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。

笑死,,,这个名字由来不知道是不是真的

在客户端访问某个地址时,会将请求交到服务器进行处理,在发送请求的时候,浏览器会将页面的头部信息 一并发送交到服务器进行处理。在处理的过程中,cookie会在服务器端生成,在服务器端处理完成后,随着http响应,在响应头中加上cookie信息 浏览器接受到响应后,会按照http响应头的cookie在客户端建立cookie ,在下次客户进行请求的时候,http会附带已经存的cookie 一并发送到服务器

比如我们在网站将一个东西加入购物车,接着关掉浏览器,再打开,购物车的东西还在,那就是添加购物的这个信息被存在了一个地方,存在了该浏览器的缓存中

cookie是基于域名安全,不同域名的cooike是不能互相访问的

cookie保存在客户端中

内存Cookie

由浏览器来维护,保存在内存中,浏览器关闭之后就消失了,存在时间短暂

硬盘Cookie

保存在硬盘中,有一个过期时间,除非用户手动清除或者到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的浏览器Cookie的查看

代码
from flask import Flask, make_response, request, redirect


app = Flask(__name__)


@app.route("/set_cookie")
def set_cookie():
    """cookie的设置"""
    # cookie保存客户端浏览器中的,所以cookie必须跟着响应对象返回给客户端
    response = make_response("set_cookie")
    # 基于响应对象提供的set_cookie方法,可以设置单个cookie
    # response.set_cookie("变量名", "变量值", max_age="变量有效期")
    response.set_cookie("user_id", "100") # 如果没有设置max_age,则当前cookie变量会在浏览器关闭(会话结束以后被浏览器删除)
    response.set_cookie("username", "xiaoming", max_age=3600)  # 如果设置max_age,则按秒作为时间单位,设置cookie的有效时间
    response.set_cookie("number", "10000", max_age=30)         # 如果设置max_age,则按秒作为时间单位,设置cookie的有效时间
    return response


@app.route("/get_cookie")
def get_cookie():
    """cookie的读取"""
    print("user_id=", request.cookies.get("user_id") )
    print("username=", request.cookies.get("username"))
    print("number=", request.cookies.get("number"))
    return "get_cookie"


@app.route("/del_cookie")
def del_cookie():
    """cookie的删除"""
    # cookie保存客户端浏览器中的,所以服务端无法直接删除cookie
    # 要实现删除cookie,只能告诉浏览器,cookie过期了,让浏览器自动删除
    response = make_response("del_cookie")
    response.set_cookie("user_id", "", max_age=0)
    response.set_cookie("username", "", max_age=0)
    return response


@app.route("/login", methods=["get", "post"])
def login():
    """基于cookie实现登录"""
    form = """
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
    </head>
    <body>
      <form action="" method="post">
        账号:<input type="text" name="username"><br><br>
        密码:<input type="password" name="password"><br><br>
        <input type="submit" value="登录">
      </form>
    </body>
    </html>
    """
    if request.method == "GET":
        return make_response(form)
    """接收客户端POST提交表单数据"""
    # 暂时不使用数据库,我们模拟用户身份判断代码
    username = request.form.get("username")
    password = request.form.get("password")
    if username == "root" and password == "123456":
        """认证通过"""
        # 基于cookie保存登录状态
        response = make_response("登录成功!")
        response.set_cookie("username", username, max_age=7200)
        response.set_cookie("user_id", username, max_age=7200)
        return response
    else:
        """认证失败"""
        # 返回GET请求的login登录页面
        response = redirect("/login")
        return response


@app.route("/user")
def user():
    """在部分需要认证身份的页面中,基于cookie判断用户登录状态"""
    if not request.cookies.get("username"):
        response = redirect("/login")
        return response

    return "个人中心的信息展示"


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

在执行完set_cookie后可以看到

cookie已经存在于浏览器中,登录后也有cookie

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1543111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简析:创业老隋推荐的蓝海项目到底好不好做?

在当前的创业浪潮中&#xff0c;网红创业凭借其独特的优势和影响力&#xff0c;成为了不少年轻人追逐的梦想。老隋&#xff0c;作为网红创业领域的佼佼者&#xff0c;凭借其丰富的经验和敏锐的洞察力&#xff0c;经常为粉丝们推荐一些看似前景广阔的蓝海项目。那么&#xff0c;…

吴恩达2022机器学习专项课程(一) 3.3 成本函数的公式

问题预览 模型的参数&#xff08;w和b&#xff09;有什么作用&#xff1f;不同的w和b对线性回归模型有什么影响&#xff1f;训练集里的y和线性回归模型预测的y&#xff08;y帽&#xff09;的区别是什么&#xff1f;成本函数的作用是什么&#xff1f;成本函数的公式是什么&…

众邦科技CRMEB商城商业版任意文件写入getshell 0day

代码审计 接口&#xff1a;/adminapi/system/crud 处理的代码如下 public function save(SystemCrudDataService $service, $id 0){$data $this->request->postMore([[pid, 0],//上级菜单id[menuName, ],//菜单名[tableName, ],//表名[modelName, ],//模块名称[table…

代码随想录训练营第55天 | LeetCode 583. 两个字符串的删除操作、​​​​​​LeetCode 72. 编辑距离、总结

目录 LeetCode 583. 两个字符串的删除操作 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;LeetCode&#xff1a;583.两个字符串的删除操_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 72. 编辑距离 文章讲解&#xff1a;代码随想录(programm…

恢复 Linux 上已删除的文件:extundelete 、PhotoRec (***)

为什么Linux的命令 rm 没有回收站呢&#xff1f;Trash-Cli&#xff1a;Linux 命令行回收站工具 &#xff08;***&#xff09; https://blog.csdn.net/ken2232/article/details/136981360 后悔药 使用回收站&#xff0c;这是第一次的后悔药&#xff1b; 使用 extundelete 等&a…

网络电视盒子哪个品牌好?2024畅销电视盒子排行榜

电视盒子的品牌和产品非常多&#xff0c;让新手在选购时难度增大&#xff0c;大部分消费者在此时会选择参考销量排名情况&#xff0c;小编这次结合各个电商平台的销量和用户评价整理了电视盒子排行榜&#xff0c;想买电视盒子不知道网络电视盒子哪个品牌好可以收藏。 TOP 1.泰捷…

如何做试卷的ocr识别算法?

要实现试卷的OCR识别算法&#xff0c;可以采取以下步骤&#xff1a; 数据预处理&#xff1a;首先需要对试卷图片进行预处理&#xff0c;包括图像降噪、灰度化、二值化等操作&#xff0c;以便提高后续文字识别的准确性。 文字检测&#xff1a;利用文字检测算法定位试卷图片中的…

.NET Framework 服务实现监控可观测性最佳实践

环境信息 系统环境&#xff1a;Windows Server开发语言&#xff1a;.NET Framework > 4.6.1APM探针包&#xff1a;ddtrace 准备工作 安装 Datakit 主机部署&#xff1a; 主机安装 - 观测云文档 打开采集 APM 采集器 Windows 主机配置 # 到如下路径&#xff0c;把ddtr…

【探索多模态视觉问答】数据集概览及特点分析

【探索多模态视觉问答】数据集概览及特点分析 引言 在计算机视觉和自然语言处理领域&#xff0c;视觉问答&#xff08;VQA&#xff09;是一个重要的任务&#xff0c;旨在让计算机理解图像内容并回答关于图像的问题。为了促进和评估多模态模型在视觉问答任务上的表现&#xff…

WordPress Wholesale Market 插件 任意文件读取漏洞复现

0x01 产品简介 WordPress plugin Wholesale Market 是一个woocommerce扩展插件&#xff0c;使您的商店能够创建批发用户&#xff0c;并通过设置产品的批发价格。 0x02 漏洞概述 WordPress plugin Wholesale Market 2.2.1之前版本存在路径遍历漏洞&#xff0c;该漏洞源于没有…

Elasticsearch8 - Docker安装Elasticsearch8.12.2

前言 最近在学习 ES&#xff0c;所以需要在服务器上装一个单节点的 ES 服务器环境&#xff1a;centos 7.9 安装 下载镜像 目前最新版本是 8.12.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2创建配置 新增配置文件 elasticsearch.yml http.host…

Linux常见指令解析一

Linux常见指令解析一 常见指令1. ls 指令2.pwd 命令3.cd 命令4.touch 命令5.mkdir 命令6.rmdir指令 && rm 指令7.man 指令8.cp 指令9.cat 命令 && tac 命令10.mv 指令11.more 指令12.less 指令13.head 指令14.tail 指令15.cal 指令 常见指令 1. ls 指令 语法…

无损压缩:制作200KB以下JPEG格式图片的实用技巧

在上传图片到社交媒体平台时&#xff0c;通常有文件大小限制&#xff0c;将图片大小限制在200KB以下可确保上传成功&#xff0c;并避免降低图片质量&#xff0c;而且在网页设计中&#xff0c;为了确保快速加载速度&#xff0c;特别是对于移动设备用户&#xff0c;限制页面上的图…

SpringBoot + MyBatisPlus分页查询

文章目录 1.思路分析2.分页查询后端实现1.com/sun/furn/config/MybatisConfig.java 注入MyBatisPlus分页拦截器2.com/sun/furn/controller/FurnController.java 添加方法3.postman测试 3.分页查询前端实现1.src/views/HomeView.vue 引入分页导航条组件2.src/views/HomeView.vue…

2024年Web前端面试题(最全、最详细、持续更新)

文章目录 24年面试题面试题总结JS相关数组拉平WebSocketjs汇总 Vue相关React相关React 18react汇总useState更新是否异步setTimout 里 setStatetypescript 其他问题浏览器如何缓存文件http常见状态码http、https的区别ES6 模块与 CommonJS 模块的差异如何捕获代码错误设计模式和…

面试八股——redis——缓存——缓存穿透、击穿、雪崩

HR&#xff1a;你在项目中的那些场景用到了redis&#xff1f; 1. 缓存穿透问题 &#xff08;项目中使用的方法&#xff09; 2. 缓存击穿 解决办法1&#xff1a;加互斥锁。大量并发时&#xff0c;先让一个人去查&#xff0c;其他人等着。这样剩下人就可在缓存直接获取值。&#…

Bayes-RF,基于贝叶斯Bayes优化算法优化随机森林RF数据回归预测(多输入单输出)-MATLAB实现

Bayesian optimization 是一种用于调节机器学习模型超参数的方法&#xff0c;而随机森林 (Random Forest, RF) 是一种强大的机器学习算法&#xff0c;常用于回归和分类任务。将它们结合起来可以提高模型性能&#xff0c;这就是 Bayes-RF 的基本思想。 下面是一个基于贝叶斯优化…

【Java程序设计】【C00364】基于Springboot的美发管理系统(有论文)

基于Springboot的美发管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及idea&…

Transformer的前世今生 day06(Self-Attention和RNN、LSTM的区别)

Self-Attention和RNN、LSTM的区别 RNN的缺点&#xff1a;无法做长序列&#xff0c;当输入很长时&#xff0c;最后面的输出很难参考前面的输入&#xff0c;即长序列会缺失上文信息&#xff0c;如下&#xff1a; 可能一段话超过50个字&#xff0c;输出效果就会很差了 LSTM通过忘…

Spring Security之认证过滤器

前言 上回我们探讨了关于Spring Security&#xff0c;着实复杂。这次咱们聊的认证过滤器就先聊聊认证功能。涉及到多方协同的功能&#xff0c;咱分开聊。也给小伙伴喘口气&#xff0c;嘻嘻。此外也是因为只有登录认证了&#xff0c;才有后续的更多功能集成的可能。 认证过滤器…