Django - session
- request.session
- session 适合存放 和用户相关的数据
- session 存放的数据必须能被 json 序列化
- session 是一个类似于字典的容器
- session 的默认存活时间默认是2周
Session 的工作原理
当用户使用 session的时候, 服务器 会 从 浏览器的 Cookie 中查找一个 cookie 的 name = sessionid
如果 能够找到 对应的 cookie , 则获取 sessionid 对应的 value, 通过 value 在服务器获取 session
如果 没有找到对应的 cookie , 服务器会创建一个新的 session对象,并将 session对象的 ID 作为 value,
将 sessionid 作为 name, 写入到 浏览器的 cookie 中
session 常见的配置
# 设置浏览器cookie 对应的 key
SESSION_COOKIE_NAME = 'sessionid'
# 设置session的默认存活时间
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
# 设置从项目根下获取 Cookie
SESSION_COOKIE_PATH = "/"
# 设置 session是否随浏览器的关闭而消亡
SESSION_EXPIRE_AT_BROWSER_CLOSE= False
# 设置 session数据的序列化器类
SESSION_SERIALIZER = django.contrib.sessions.serializers.JSONSerializer
session 中常见的方法
- session 存储
session[key] = val
session.setdefault(key, val)
- session 消亡
session.flush()
- 设置session存活时间
session.set_expiry(val)
val 如果是一个数字,则代表 剩余多少秒消亡
val 是一个日期,则到日期时间点 消亡
- 清除过期的 session
session.clear_expired()
session 相关的表 django-session
session_key : session的ID
session_data : session序列化的数据
expire_data : session的过期时间
django 用户登录
-
authenticate(request, username, password) : 会验证用户名、密码,如果正确,返回 user对象
-
login(request, user) : user 就是 authenticate 返回的认证后的 user 对象
-
logout(request) : 退出登录
判断用户是否登录
request.user.is_anonymous 判断当前用户是否是匿名用户