django token session cookie 保持用户登录状态(用户登录信息保存,查询,删除)

token (需要django的rest_framework.authtoken模块)

  1. 客户端通过post请求发送username和password到服务器端,服务器端验证用户名和密码正确后返回一个token
  2. 客户端接受返回的token并保存
  3. 客户端发起请求时需要在请求的header中的authentication属性添加token值
  4. django使用request.user.is_authenticated()判断用户是否登录,若token正确则会自动登陆

session(为每个浏览器创建一个session对象,每个session对象有一个Jsessionid,以cookie的方式将Jsessionid返回给浏览器):

django token session cookie 保持用户登录状态(用户登录信息保存,查询,删除)_第1张图片

  1. 前端页面发送username和password到服务器的login接口时,针对每个用户的浏览器生成一个session对象,每个session对象有一个Jsessionid,login判断用户名和密码正确后,,通过request.session[‘username’]=username,request.session[‘isLogin’]=true往该用户浏览器的session中添加多个key/value值,数据库django-session表中为每个session对象生成一条记录[sessionid,key,value:“hduhueu”,“username”:“pengcong1995”;“isLogin”:“true”],并且将Jsessionid置于cookie中返回给前端(默认自动进行)
  2. 前端接收返回的结果自动保存Jsessionid在cookie中
  3. 前端浏览器发起请求时,请求里自动带上了cookie的数据包括Jsessionid
  4. 服务器端接收请求,通过Jsessionid找到对应的session对象,通过不同的session对象为不同的用户服务,使用username=request.session.get(‘username’)判断用户是否登录,若username存在,则为已登录过的用户,用户名已知,不存在则为未登录用户(使用request.session.get(‘username’)时,服务器自动读取cookie中的sessionid,找到对应的session,若不存在sessionid,则未登录没有session对象,再根据session对象找到对于的key即username,再获取该值,如果存在则已登陆过,否则未登陆)
  5. 退出登陆时,根据cookie中的sessionid找到对应的session对象,删除当前用户的session中的数据即可,del request.session[‘username’],全部删除,request.session.clear()

使用django自带的登录模板:

  1. 登录user=authenticate(username,password),login(request,user)
  2. 查询当前用户 request.user,查询是否登陆:request.user.is_authenticated()
  3. 用户退出注销,logout(request)

你可能感兴趣的:(session,cookie,token)