目录:
【Flask学习笔记:一】开发环境部署
【Flask学习笔记:二】Flask 入门基础知识
【Flask学习笔记:三】Flask 中的 request、response
【Flask学习笔记:四】Flask 应用和请求上下文
【Flask学习笔记:五】Jinja2 模板引擎
【Flask学习笔记:六】Flask 蓝图
【Flask学习笔记:七】Flask - WTF 处理表单
【Flask学习笔记:八】Flask 中的 cookie、session
【Flask学习笔记:九】Flask-SQLAlchemy
【Flask学习笔记:八】Flask 中的 cookie、session
Session 是存储在服务器中的, Cookies 是存储在浏览器本地中,而 Flask 的 Session 是基于 Cookies, Session 是经过加密保存在 Cookies 中。
Cookie
1.cookie的基本概念
Cookie以文本文件的形式存储在客户端的计算机上。其目的是记住和跟踪与客户使用相关的数据,以获得更好的访问者体验和网站统计信息。单个 Cookie 数据大小一般不超过 3 KB。
Cookie 基本的语法如下:
set_cookie(self, key, value='', max_age=None, expires=None,
path='/', domain=None, secure=False, httponly=False)
参数说明:
参数 | 描述 |
---|---|
name | 必需项,规定 Cookie 的名称 |
value | 必需项, 规定 Cookie 的值 |
max_age | 可选项, 规定 Cookie 持续多长时间客户端的浏览器会话 |
expires | 可选项,规定是 datetime 对象或 UNIX 时间戳 |
path | 可选项,规定 Cookie 在当前 Web 下哪些目录有效 |
domain | 可选项,规定 Cookie 作用的有效域名 |
secure | 可选项,规定是否通过安全的 HTTPS 连接来传输 Cookie |
httponly | 可选项,设置是否允许 JavaScript 访问 cookie |
2.Cookie 的基本使用
- 设置 Cookie: 通过 Response 对象设置。
@app.route('/setcookie', methods = ['POST', 'GET'])
def setcookie():
if request.method == 'POST':
user = request.form['nm']
resp = make_response(render_template('readcookie.html'))
resp.set_cookie('userID', user)
return resp
- 获取 Cookie: 在 Request 中通过键获取其对应的值。
@app.route('/getcookie')
def getcookie():
name = request.cookies.get('userID')
return name
- 删除 Cookie: 通过 delete_cookie() 来完成。
@app.route('/delcookie')
def delcookie():
resp = make_response(render_template('delcookie.html'))
resp.delete_cookie('userID')
return resp
Session
1.Session 的基本配置
Session 是基于 Cookie 实现的, 保存在服务端的键值对(session[‘name’] = ‘value’)中, 同时在浏览器中的 Cookie 中也对应一相同的随机字符串,用来再次请求的时候验证。使用 Flask 的 Session 就一定要配置 SECRET_KEY 这个选项。一般将 SECRET_KEY 设置为24位的字符,也可以根据需求自定义。
配置文件中定义:
SECRET_KEY = os.urandom(24)
或在入口文件中定义:
app.config['SECRET_KEY '] = os.urandom(24)
2.Session 的基本使用
- 设置 Session: 设置 Session 主要是通过 session[‘name’] = ‘value’ 形式设置,name 代表名称,value代表值。
@app.route('/setsession')
def setsession():
session['username'] = 'zhangsan' # 将userrname=zhangsan 存于 Session 中
return 'success'
- 获取 Session: 可以通过两种方式获取
第一种:
result = session['name'] # 如果内容不存在,会报异常
第二种:
result = session.get('name') # 如果内容不存在,将返回 None
- 删除 Session: 使用 Session.pop(‘key’) 方法
@app.route('/delsession')
def delsession():
session.pop('name')
return 'del session'
- 删除所有 Session 值: 使用 Session.clear 方法
@app.route('/clearsession')
def clearsession():
session.clear
return 'clear session'
3.设置 Session 的过期时间
如果没有指定session的过期时间,那么默认是浏览器关闭后就会失效。session.permanent = True 在 Flask 下则可以将有效期延长至一个月。
有两种方式设置有效期时间:
- 设置 session 的 permanent属性为True,那么过期时间是31天
- 通过给 app.config 设置 PERMANENT_SESSION_LIFETIME 来更改过期时间
from flask import Flask,session
from datetime import timedelta
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24) # 设置密钥
# 方法一
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 (可以是任意整数天数)
# 设置session
@app.route('/')
def set():
session['username'] = 'zhangsan'
# 方法二
session.permanent = True # 设置过期时间为 31 天
return 'success'## 目标