0
点赞
收藏
分享

微信扫一扫

Django - session

青乌 2022-02-05 阅读 74

Django - session

  • request.session
  • session 适合存放 和用户相关的数据
  • session 存放的数据必须能被 json 序列化
  • session 是一个类似于字典的容器
  • session 的默认存活时间默认是2周
  • session 可以实现跨请求传递数据

cookie

cookie 是存储在浏览器上的一段字符串,由 键值对组成,可以设置过期时间

cookie 在 每次请求的时候,会被自动发送给 服务器 ,服务器通过 request.COOKIES 获取

Session 的工作原理

当用户使用 session的时候, 服务器 会 从 浏览器的 Cookie 中查找一个 cookie 的 name = sessionid
如果 能够找到 对应的 cookie , 则获取 sessionid 对应的 value, 通过 value 在服务器获取 session
如果 没有找到对应的 cookie , 服务器会创建一个新的 session对象,并将 session对象的 ID 作为 value,
将 sessionid 作为 name, 通过 Response响应对象 写入到 浏览器的 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 用户登录

from django.contrib.auth import authenticate, login, logout

  • authenticate(request, username, password) : 会验证用户名、密码,如果正确,返回 user对象

  • login(request, user) : user 就是 authenticate 返回的认证后的 user 对象

login方法、完成了将登录标记 写到 session的过程
  • logout(request) : 退出登录

判断用户是否登录

request.user.is_anonymous 判断当前用户是否是匿名用户

举报

相关推荐

0 条评论