[flask]cookie的基本使用/

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

是什么

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

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

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

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

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

cookie保存在客户端中

内存Cookie

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

硬盘Cookie

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

代码
python 复制代码
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

相关推荐
zopple4 小时前
常见的 Spring 项目目录结构
java·后端·spring
2401_874732534 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
FreakStudio5 小时前
0 元学嵌入式 GUI!保姆级 LVGL+MicroPython 教程开更,从理论到实战全搞定
python·单片机·嵌入式·面向对象·电子diy
cjy0001115 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本6 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34166 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
剑穗挂着新流苏3127 小时前
117_PyTorch 实战:利用训练好的模型进行单张图片验证
人工智能·python·深度学习
程序员cxuan7 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
Lethehong7 小时前
Python Selenium全栈指南:从自动化入门到企业级实战
python·selenium·测试工具·自动化
智算菩萨8 小时前
MP3音频编码原理深度解析与Python全参数调优实战:从心理声学模型到LAME编码器精细控制
android·python·音视频