flask的cookie和session会话保持

发布时间 2023-10-04 12:21:52作者: 蕝戀

Cookie

获取请求cookie

通过请求对象中的cookies属性可以获取cookie。

实例:

from flask import Flask, request

@app.route("/user-info", methods=["get", "post"])
def userinfo():
  username = request.cookies.get("username")
  return f"you name is :{username}"

设置响应cookie

通过Response对象的set_cookie()方法设置cookie,同时一般还会设置cookie的有效期、httponly、允许域等等属性。

def set_cookie(self,
               key: str,
               value: str = "",
               max_age: timedelta | int | None = None,
               expires: str | datetime | int | float | None = None,
               path: str | None = "/",
               domain: str | None = None,
               secure: bool = False,
               httponly: bool = False,
               samesite: str | None = None) -> None

实例:

from flask import Flask, request, make_response

@app.route("/user-info", methods=["get", "post"])
def userinfo():
  username = request.cookies.get("username")
  
  # 构建请求对象并接收
  response = make_response(f"you name is :{username}")
  response.set_cookie("username", "newname", max_Age=3600)
  return f"you name is :{username}"

删除cookie

本质上就是将cookie的有效期设置为0

response.set_cookie("<cookie名>", max_age=0)

Session

flask中使用Session需要配置app中的SECRET_KEY,因为Flask中的session默认并不是存储在服务器端的,而是通过加密算法加密后以cookie形式返回给客户端存储。

客户端携带过来后会进行解密,所以需要设置SECRET_KEY用于加密、解密。

设置secret_key

app.secret_key = "a*)(ihq#Eadbn8/*+XA2qAodhcoi$%^!5ss6z31ssdas"

获取session

通过导入from flask import session来使用

@app.route('/get_session')
def get_session():
    username = session.get('username')
    return f"you name is {username}"

设置session

from flask import session

@app.route('/set_session')
def set_session():
    # 直接用字典的方式设置即可
    session['username'] = 'flask'
    return 'set session ok'

session的有效期设置

默认情况下session随着会话消失而消失,如果需要长时间保存,则需要设置:

# 1、app配置permanent_session_lifetime 
app.permanent_session_lifetime = datatime.timedelta(days=7)

# 2、在路由中开启session持久保持属性
@app.route('/set_session')
def set_session():
    # 直接用字典的方式设置session即可,这点与django相同
    session['username'] = 'flask'
    
    # 开启持久保存session,保存的时长为permanent_session_lifetime 所设置的值
    session.permanent = True
    
    return 'set session ok'

删除session

删除单个

from flask import session

@app.route('/clear_signle_session')
def set_session():
    # 由于session就是一个字典,,所以直接可以调用字典的pop方法弹出
    session.pop("username")
    return "clean username ok"

删除所有

from flask import session

@app.route('/clear_all_session')
def set_session():
    # 由于session就是一个字典,,所以直接可以调用字典的clear方法删除所有。
    session.clear()
    return "clean all session ok"