flask cookie和session

Flask cookie和session

Flask session

Flask采用的是client side session:将session数据加密,然后存储在cookie中。

使用Flask中的session需要先导入session

1
from flask import session

因为flask的session是通过加密之后放到了cookie中,有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置SECRET_KEY这个全局配置

1
2
3
4
import os

app.config["SECRET_KEY"] = "vary_hard_to_guess"
# app.config["SECRET_KEY"] = os.urandom(24) # 使用24字节的随机字符作为key

之后就可以直接操作session了,读写session可以通过操作字典的方式。

设置session

1
session["username"] = "admin"

获取session

因为session相当于一个字典,所以可以通过session['key']的方式获取,也可以通过get方法获取

1
2
user = session["username"]      # 如果没有设置username,则会返回异常
user = session.get("username") # 如果没有设置username,则会返回None

删除session

可以使用pop方法删除session

1
2
3
session.pop("username")     # 删除指定session内容

session.clear() # 删除全部的session

过期时间

如果没有设置session的有效期。那么默认就是浏览器关闭后过期。
如果设置session.permanent=True,那么就会默认在31天后过期。
如果不想在31天后过期,那么可以设置app的配置:

1
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hour=2)   # 在两个小时后过期。

Flask cookies

设置cookie

使用Response对象设置返回对象,使用set_cookie方法来设置cookie

1
2
3
4
5
6
7
from flask import Response

@app.route("/"):
def index():
res = Response("返回字符串")
res.set_cookie("username", "admin") # 设置cookie
return res

获取cookie

使用Request对象cookies字段的get方法来获取我们所需要的cookie

1
name=request.cookies.get('username')  

删除cookie

使用Response对象设置返回对象,使用del_cookie方法来删除cookie

1
2
3
4
5
6
7
from flask import Response

@app.route("/"):
def index():
res = Response("返回字符串")
res.delete_cookie("username") # 删除cookie
return res

设置cookie有效期

在设置cookie时,使用set_cookie的参数max_age来设置有有效期,单位为秒

1
res.set_cookie("username", "password", max_age=60)

还可以使用参数expires来设置有效期,其值为datetime类型
注意:expires使用的是格林尼治时间,相对北京时间少8小时

1
2
3
4
5
from datetime import datetime

date = datetime(year=2020, month=2, days=12, hour=0, minute=0)
# date = datetime.now() + datetime(days=30, hours=16)
res.set_cookie("username", "password", expires=date)

如果没有设置过期时间,则默认为浏览器关闭时过期

设置cookie的有效域名

cookie默认只能在主域名下使用,可以通过set_cookiedomain参数来设置有效域名:

1
res.set_cookie("username", "password", domain=".baicu.com")
文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2020/03/10/flask/flask Session/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog