Flask Cookies
Cookie以文本文件的形式存储在客户端的计算机上。其目的是记住和跟踪与客户使用相关的数据,以获得更好的访问者体验和网站统计信息。
Request对象包含Cookie的属性。它是所有cookie变量及其对应值的字典对象,客户端已传输。除此之外,cookie还存储其网站的到期时间,路径和域名。
在Flask中,对cookie的处理步骤为:
- 设置cookie:
设置cookie,默认有效期是临时cookie,浏览器关闭就失效
可以通过 max_age 设置有效期, 单位是秒
resp = make_response("set cookie success") # 设置响应体
resp.set_cookie("serendipity", "serendipity", max_age=4096)
- 获取cookie
获取cookie,通过request.cookies
的方式, 返回的是一个字典,可以获取字典里的相应的值
cookie_1 = request.cookies.get("serendipity")
- 删除cookie
这里的删除只是让cookie过期,并不是直接删除cookie
删除cookie,通过delete_cookie()
的方式, 里面是cookie的名字
resp = make_response("del cookie success") # 设置响应体
resp.delete_cookie("serendipity")
示例
from flask import Flask, make_response, request # 注意需导入 make_response
app = Flask(__name__)
@app.route("/set_cookies")
def set_cookie():
resp = make_response("set cookie success") # 设置响应体
resp.set_cookie("serendipity", "serendipity", max_age=4096)
return resp
@app.route("/get_cookies")
def get_cookie():
cookie_1 = request.cookies.get("serendipity") # 获取名字为serendipity对应cookie的值
return cookie_1
@app.route("/delete_cookies")
def delete_cookie():
resp = make_response("del cookie success") # 设置响应体
resp.delete_cookie("serendipity")
return resp
if __name__ == '__main__':
app.run(debug=True)
设置Cookie
响应信息
获取Cookie
”删除“Cookie
响应信息
这里可以看到只是让Cookie过期,而非真正删除Cookie
Flask Session
与Cookie不同,**Session(会话)**数据存储在服务器上。会话是客户端登录到服务器并注销服务器的时间间隔。需要在该会话中保存的数据会存储在服务器上的临时目录中。
为每个客户端的会话分配会话ID。会话数据存储在cookie的顶部,服务器以加密方式对其进行签名。对于此加密,Flask应用程序需要一个定义的密钥(SECRET_KEY)。
Session对象也是一个字典对象,包含会话变量和关联值的键值对。
例如,要设置一个**‘username’**会话变量,请使用以下语句:
Session['username'] = 'admin'
要释放会话变量,请使用**pop()**方法。
session.pop('username', None)
示例
from flask import render_template
from flask import make_response
from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = 'asdfghjklqwertyuiopzxcvbnm' #设置密钥
@app.route('/')
def index():
# 判断用户名是否存在Session中,有显示登录成功界面,无显示登录界面
if 'username' in session:
username = session['username']
return '登录用户名是:' + username + '<br>' + "<b><a href = '/logout'>点击这里注销</a></b>"
return "您暂未登录, <br><a href = '/login'></b>" + "点击这里登录</b></a>"
@app.route('/login', methods = ['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return '''
<form action = "" method = "post">
<p><input type="text" name="username"/></p>
<p><input type="submit" value ="登录"/></p>
</form>
'''
@app.route('/logout')
def logout():
# 从会话中删除用户名username(如果存在)
session.pop('username', None)
#重定向到首页
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug = True)
效果演示
未登录
登录界面
登录成功
如果你希望访问源码:Flask-code gitee