想用 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.com
和 blog.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 了。
评论(0)