阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Python自学26 – Cookie和Session

253次阅读
没有评论

共计 3413 个字符,预计需要花费 9 分钟才能阅读完成。

Python 自学 26 – Cookie 和 Session

在学习 Web 开发时,CookieSession 是两个绕不开的概念。它们解决了 HTTP 协议“无状态”的问题,让服务器能够“记住”用户的状态,从而实现登录、购物车、个性化推荐等功能。本文将结合 Python 的示例来理解两者的区别与应用。

Cookie 基础

  • 定义 :Cookie 是存储在客户端浏览器中的一小段数据,由服务器发送并保存在用户本地。

  • 特点:

    • 存储在浏览器端

    • 可以设置过期时间

    • 用户可手动清除

    • 容量有限(一般每个域名 4KB 左右)

Python 设置 Cookie 示例(Flask)

from flask import Flask, make_response, request

app = Flask(__name__)

@app.route('/set_cookie')
def set_cookie():
    resp = make_response("Cookie 已设置")
    resp.set_cookie("username", "Alice", max_age=60*60)  # 1 小时有效 
    return resp

@app.route('/get_cookie')
def get_cookie():
    username = request.cookies.get("username")
    return f"当前用户: {username}" if username else "未找到 Cookie"

if __name__ == '__main__':
    app.run(debug=True)

Session 基础

  • 定义 :Session 是存储在服务器端的用户会话信息,通常依赖 Cookie 来保存 Session ID。

  • 特点:

    • 数据保存在服务器,更安全

    • 通过唯一的 Session ID 区分用户

    • 适合存储敏感信息(如登录状态)

Python 使用 Session 示例(Flask)

from flask import Flask, session

app = Flask(__name__)
app.secret_key = "my_secret_key"  # 必须设置密钥 

@app.route('/login')
def login():
    session['user'] = 'Alice'
    return "用户已登录"

@app.route('/profile')
def profile():
    user = session.get('user')
    return f"欢迎回来, {user}" if user else "请先登录"

@app.route('/logout')
def logout():
    session.pop('user', None)
    return "已退出登录"

if __name__ == '__main__':
    app.run(debug=True)

Cookie 与 Session 的区别

特性 Cookie(客户端存储) Session(服务器端存储)
存储位置 浏览器端 服务器端
安全性 较低,容易被篡改 较高,敏感信息存储安全
存储容量 每个域名约 4KB 理论上无限(受服务器限制)
生命周期 可设置过期时间 默认随会话结束而销毁
应用场景 记住用户名、偏好设置 登录状态、购物车、权限管理

好的,我们来写一个 “记住我登录” 的完整示例。这里用 Flask 框架演示,结合 SessionCookie,实现用户勾选“记住我”后,即使关闭浏览器再打开,也能保持登录状态。

Flask 实现“记住我登录”

核心思路

  1. 用户登录时,校验用户名和密码。

  2. 如果勾选了“记住我”,则设置一个持久化的 Cookie(比如 7 天有效)。

  3. Session 存储用户登录状态,Cookie 保存 Session ID。

  4. 下次访问时,如果 Cookie 还有效,自动恢复登录状态。

示例代码

from flask import Flask, request, redirect, url_for, render_template_string, session, make_response
import datetime

app = Flask(__name__)
app.secret_key = "my_secret_key"  # 必须设置密钥 

# 模拟用户数据库 
users = {"alice": "123456", "bob": "password"}

# 简单的登录页面模板 
login_page = """
<form method="POST">
  用户名: <input type="text" name="username"><br>
  密码: <input type="password" name="password"><br>
  <label><input type="checkbox" name="remember"> 记住我 </label><br>
  <input type="submit" value="登录">
</form>
"""

@app.route('/')
def index():
    user = session.get('user')
    if user:
        return f"欢迎回来, {user}! <a href='/logout'> 退出 </a>"
    return "你还没有登录,<a href='/login'> 去登录 </a>"

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form.get("username")
        password = request.form.get("password")
        remember = request.form.get("remember")

        # 校验用户名和密码 
        if username in users and users[username] == password:
            session['user'] = username
            resp = make_response(redirect(url_for("index")))

            # 如果勾选了“记住我”,设置 Cookie 有效期 7 天 
            if remember:
                expire_date = datetime.datetime.now() + datetime.timedelta(days=7)
                resp.set_cookie("remember_me", username, expires=expire_date)
            return resp
        else:
            return "用户名或密码错误!<a href='/login'> 重试 </a>"
    return render_template_string(login_page)

@app.before_request
def load_user_from_cookie():
    """如果 session 里没有用户,但 Cookie 里有,就自动登录"""
    if 'user' not in session:
        username = request.cookies.get("remember_me")
        if username in users:
            session['user'] = username

@app.route('/logout')
def logout():
    session.pop('user', None)
    resp = make_response("已退出登录 <a href='/'> 返回首页 </a>")
    resp.delete_cookie("remember_me")  # 删除 Cookie
    return resp

if __name__ == '__main__':
    app.run(debug=True)

运行效果

  1. 打开 /login,输入用户名和密码,勾选“记住我”。

  2. 登录成功后,关闭浏览器再打开,访问 /,仍然显示已登录状态。

  3. 点击“退出”,清除 Session 和 Cookie,下次访问需要重新登录。

总结

  • Cookie:适合存储一些非敏感的、需要跨会话的小数据,比如“记住用户名”、“主题颜色”。

  • Session:适合存储敏感的、与用户身份相关的数据,比如“是否已登录”、“购物车内容”。

  • 在实际开发中,二者常常结合使用:Session 存储核心数据,Cookie 保存 Session ID

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2025-10-14发表,共计3413字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7792540
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...