智能家居
销毁session(Python学习【85】:python编程-详解cookie 与 tocken 以及session)

一、学前花絮

应该说这三者都是 Web 开发中用来解决 “HTTP 是无状态协议” 这一核心问题的方案。简单来说,HTTP 协议本身无法记住用户是谁,所以需要这些机制来帮服务器“认出”你。

1. cookie:客户端的“小纸条”

  • 是什么?

形象比喻:就像你去超市办了一张会员卡(cookie),上面写着你的卡号。每次去结账,你出示这张卡,收银员就知道你是谁。

  • 特点:

自动发送:浏览器会自动处理,无需开发者手动干预。

不安全:因为存在客户端,用户可以查看甚至修改(除非加密),容易遭受 XSS 或 CSRF 攻击。

  • 应用场景:

跟踪用户行为(广告追踪)。

2. Session:服务器端的“档案柜”

  • 是什么?

形象比喻:你去图书馆办了一张临时阅览证(Session ID)。图书馆(服务器)的后台系统里存着你的借阅记录和身份信息(Session Data)。你只需要带着这张证(Session ID),管理员一扫就知道你是谁,以及你借了什么书。

  • 特点:

有状态:服务器必须维护一个 Session 列表。

扩展性差:在分布式系统(多台服务器)中,需要专门的机制(如 Redis)来共享 Session 数据,否则用户刷新页面可能会“掉线”。

  • 应用场景:

电商网站的购物车(如果涉及敏感计算)。

3. Token (令牌):自包含的“身份证”

  • 是什么?

客户端(如前端网页或 App)需要自己保存这个 Token(通常在 LocalStorage 或 cookie 中),并在每次请求时手动把它放在 HTTP 请求头里。

无状态:服务器不保存 Token 状态,减轻了服务器压力。

跨域友好:不依赖 cookie,通过 HTTP 头传输,天然支持跨域请求。

防篡改:通过数字签名(Signature),服务器能验证 Token 是否被修改过。

  • 应用场景:

移动端 App(原生 App 没有 cookie 概念,通常用 Token)。

4.总结与建议

  1. cookie vs Session:通常它们是配合使用的。Session 是服务器存数据的机制,而 cookie 是传输 Session ID 的载体。
  2. Token vs Session:这是目前最常争论的点。
  • 如果你做的是传统网站,且对安全性要求极高(需要随时能踢出用户),用 Session。
  • 如果你做的是App、API 接口、或者前后端分离的大型分布式系统,用 Token (JWT)。

cookie 是存在浏览器里的小纸条;Session 是服务器里的档案柜,靠纸条上的编号来查;Token 则是把档案内容加密后直接发给用户,让服务器不再需要查档案柜。

2.2 Python 代码(配合 Flask 框架)来模拟这三种机制

需要安装 Flask 和 itsdangerous (用于生成 Token):

1. cookie 示例:存一个“访客名字”

操作流程:

2.访问 http://127.0.0.1:5000/set_cookie,显示如下:

Python学习【85】:python编程-详解coo<em></em>kie 与 tocken 以及sessionnerror="javascript:errorimg.call(this);">

3.访问 http://127.0.0.1:5000/get_cookie -> 显示如下:

Python学习【85】:python编程-详解coo<em></em>kie 与 tocken 以及sessionnerror="javascript:errorimg.call(this);">

原理:服务器在内存里存数据,只给浏览器发一个“钥匙”(Session ID)。

Python学习【85】:python编程-详解coo<em></em>kie 与 tocken 以及sessionnerror="javascript:errorimg.call(this);">

操作流程:

  • 访问 http://127.0.0.1:5001/login -> 浏览器 cookie 里多了一个 session 字段。网页显示如下:
Python学习【85】:python编程-详解coo<em></em>kie 与 tocken 以及sessionnerror="javascript:errorimg.call(this);">

  • 访问 http://127.0.0.1:5001/profile -> 显示 "用户 123 的个人资料..."。网页显示如下:
Python学习【85】:python编程-详解coo<em></em>kie 与 tocken 以及sessionnerror="javascript:errorimg.call(this);">

原理:服务器把数据打包加密成一串字符串,发给客户端,客户端自己存,每次请求手动带上。

Key: Authorization

如果带了正确的头,服务器就会返回数据。

Python学习【85】:python编程-详解coo<em></em>kie 与 tocken 以及sessionnerror="javascript:errorimg.call(this);">

其实,从另外一个层面理解token的作用会更直观,当我们直接:http://127.0.0.1:5002/api_data的时候会出现错误。这就是token的作用!Token 的核心作用之一就是访问控制(Access Control)。在没有 Token 的情况下直接访问 http://127.0.0.1:5002/api_data,服务器会拒绝你的请求。

2.3总结对比

通过python编写的cookie、session和token程序,三者都是对用户访问网页的身份认证,是一种安全访问机制。但三者的实现原理都不相同。分析这几个程序,我们对flask的认识也是逐渐深入了。

让我们保持学习热情,多做练习。我们下期再见!


Python学习【85】:python编程-详解coo<em></em>kie 与 tocken 以及sessionnerror="javascript:errorimg.call(this);">

快乐男孩

#python#


顶一下()     踩一下()
发表评论
0评