django判断用户是否登录:cookie与session校验机制

登录流程:

django判断用户是否登录:cookie与session校验机制_第1张图片

 

 

1. http请求是无状态的:

前端用户可以发起很多url请求,那么服务器如何区分哪个请求对应哪个用户呢?前端请求是独立的,服务器从理论上来说是无法区分哪个请求是哪个用户的,所以出现了cookie和session机制。

 

 

2.怎样让服务器区分接收的url请求是哪个用户的?

向url请求头/参数中添加 username和password都是不安全的。可以给用户一串随机字符串(token),token要满足几个条件:a.够随机,无法伪造    

b.字符串由服务器生成,服务器要保存字符串

c.字符串要和用户对应起来

这个就是session机制

 

3.登录的过程(django服务器端)
(1)查询用户是否存在

(2)如果不存在则登录:login(request.user)逻辑

a.先将用户的基本信息组成json,然后加密生成加密的session_value字符串

b.随机生成一串长的字符串,叫做sessionid

c.将sessionid(key)和session_value绑定在一起保存到数据库中

d.将sessionid(session_key)写入到cookie中

e.返回请求给浏览器

django判断用户是否登录:cookie与session校验机制_第2张图片

  1. 登录过程(浏览器)
    (1)从请求报文里面解析出cookie,cookie中写入了sessionid

(2)将sessionid以key-value方式写入到本地存储之中

django判断用户是否登录:cookie与session校验机制_第3张图片

(3)后续针对该网站的所有请求都会加上cookie

 

4.django如何确定某个请求是否登录?

(1)拦截器会拦截所有的请求
(2)在拦截器中发现了在cookie中的sessionid后,通过该sessionid查询到session_data,从session_data中解析出用户的id,通过id查询到用户表

(3)对每个request都设置一个属性:user。所以在代码中可以根据request.user来判断用户是否登录

django判断用户是否登录:cookie与session校验机制_第4张图片

 

5.cookie和session的区别
cookie在客户端,session在服务端

你可能感兴趣的:(django开发,session,django,cookie,前端登录与校验)