[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

相关推荐
_.Switch17 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
Chrikk1 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*1 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue1 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man1 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
测开小菜鸟1 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
萧鼎3 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸3 小时前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农3 小时前
Python 继承、多态、封装、抽象
开发语言·python
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源