想用 Python 来玩转 Cookie? 没问题,这东西其实不难,关键是要理解它的原理。我就用大白话给你讲讲,怎么在你的 Python 代码里 定义 Cookie,设置过期时间,还有一些实用的小技巧。

首先,得搞清楚 Cookie 是个啥玩意儿。你可以把它想象成网站在你电脑里放的一个小纸条,上面写着你的身份信息。下次你再来这个网站,它一看到这个纸条,就知道你是谁了。

最常用的场景,当然就是用户登录了。当你输入用户名和密码登录一个网站,网站就会给你发一个 Cookie,里面可能包含了你的用户 ID 或者加密后的认证信息。这样,你下次访问其他页面的时候,浏览器会自动带上这个 Cookie,网站就知道你已经登录了,就不用你每次都输入密码啦!

那么,Python 怎么定义 Cookie 呢? 这就涉及到Web框架了,比如 Django 或者 Flask。这里我以 Flask 为例,给你展示一下怎么操作:

“`python
from flask import Flask, make_response, request

app = Flask(name)

@app.route(‘/’)
def index():
resp = make_response(‘

Hello World!

‘)
resp.set_cookie(‘username’, ‘zhangsan’, max_age=3600) # 设置 Cookie
return resp

@app.route(‘/read_cookie’)
def read_cookie():
username = request.cookies.get(‘username’)
return f”Hello, {username}!” if username else “No username found.”

if name == ‘main‘:
app.run(debug=True)
“`

这段代码,就是一个简单的 Flask 应用。我们来一行一行地拆解:

  • from flask import Flask, make_response, request: 引入必要的模块。Flask 是核心类,make_response 用于构造响应对象,request 用于获取请求信息。
  • app = Flask(__name__): 创建一个 Flask 应用实例。
  • @app.route('/'): 这是一个装饰器,把 / 路由绑定到 index 函数。也就是说,当用户访问网站的根目录时,就会执行 index 函数。
  • resp = make_response('<h1>Hello World!</h1>'): 创建一个响应对象,内容是 “Hello World!”。
  • resp.set_cookie('username', 'zhangsan', max_age=3600): 这就是设置 Cookie 的关键代码!
    • 'username' 是 Cookie 的名字,就像这个小纸条的标签。
    • 'zhangsan' 是 Cookie 的值,也就是小纸条上的内容。
    • max_age=3600 是 Cookie 的过期时间,单位是秒。这里设置的是 3600 秒,也就是 1 小时。过了 1 小时,这个 Cookie 就失效了。
  • return resp: 返回响应对象,浏览器会收到这个响应,并将 Cookie 保存到本地。

然后,我们再看看怎么读取 Cookie:

  • @app.route('/read_cookie'): 定义另一个路由 /read_cookie
  • username = request.cookies.get('username'): 从 request.cookies 字典中获取名为 'username' 的 Cookie 的值。如果 Cookie 不存在,get() 方法会返回 None
  • return f"Hello, {username}!" if username else "No username found.": 根据是否找到 Cookie,返回不同的内容。

怎么样,是不是很简单? 但是, Cookie 的设置还有一些高级的用法。

1. 设置 Cookie 的 path 和 domain

默认情况下,Cookie 的 path/,表示这个 Cookie 对整个网站都有效。如果你只想让 Cookie 对某个目录下的页面有效,可以设置 path 参数。 例如:

python
resp.set_cookie('username', 'zhangsan', path='/admin')

这样,只有访问 /admin 目录下的页面,才会带上这个 Cookie。

domain 参数用于设置 Cookie 的域名。 默认情况下,Cookie 的域名是当前网站的域名。 如果你想让 Cookie 对某个子域名有效,可以设置 domain 参数。 例如:

python
resp.set_cookie('username', 'zhangsan', domain='.example.com')

这样,www.example.comblog.example.com 都可以访问到这个 Cookie。

2. 设置 Cookie 的 secure 和 httponly 属性

secure 属性表示 Cookie 只能在 HTTPS 连接下传输。 这样可以防止 Cookie 被中间人窃取。 设置方法如下:

python
resp.set_cookie('username', 'zhangsan', secure=True)

httponly 属性表示 Cookie 只能被服务器访问,不能被 JavaScript 访问。 这样可以防止 XSS 攻击。 设置方法如下:

python
resp.set_cookie('username', 'zhangsan', httponly=True)

3. 删除 Cookie

删除 Cookie 的方法也很简单,只需要把 Cookie 的值设置为空,然后设置过期时间为 0 即可。

python
resp.set_cookie('username', '', max_age=0)

Cookie 的一些注意事项

  • Cookie 的大小限制: 每个 Cookie 的大小不能超过 4KB。
  • Cookie 的数量限制: 每个域名下的 Cookie 数量不能超过 50 个。
  • Cookie 的安全性: Cookie 容易被窃取,所以不要在 Cookie 中保存敏感信息,比如密码。

总而言之,使用 Python 定义 Cookie, 要理解 Cookie 的原理,掌握 Flask (或者你用的其他Web框架) 提供的 API, 注意 Cookie 的安全性和限制。有了这些知识,你就可以在你的 Python Web 应用中灵活地使用 Cookie 了。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。