cookie的存储
cookie是浏览器支持的一种本地存储方式。以dict,键值对方式存储。
{"sessionkey": "123"}
浏览器会自动对于它进行解析。
http请求是一种无状态的请求
用户向服务器发起的两次请求之间是没有状态的。也就是服务器并不知道这是同一个用户发的。
有状态请求(cookie)
服务器a
发回来的id
会放到服务器a
的域之下。不能跨域访问cookie。
使用浏览器随便打开一个网页,然后f12
打开。
比如我使用的Chrome
浏览器
会找到存储在浏览器本地的cookie值
点击clear all
清空所有的cookie
f5
刷新页面,会发现又把这些cookie值进来。
如果将用户名和密码直接保存在cookie,可以实现最垃圾最简略版本的自动登录。
解决cookie放在本地不安全的问题(session)
用户在第一次请求后,浏览器回复的id既可以是用户的user id。
也可以一段任意的字符串,我们把它叫做session id
根据用户名和密码,服务器会采用自己的规则生成session id
。这个session id
保存在本地cookie。浏览器请求服务器会携带。
输入用户名 & 密码
调用 login(), 后端程序会根据用户名密码生成session id。保存在数据库中。
用户登录之后,需要通过这个session id取出这些基本信息。
Django的默认表中的session
表就记录了用户登录时,后端我们Django为用户生成的sessionid
。
可以看到session key value
和过期时间。
我们可以清空这张表的数据。运行项目进行登录。
此时通过f12
查看浏览器在本地存储的session id
。可以看到如下图和我们数据库中的一致。
session_key 发到浏览器叫做session id
通过session id 用户访问任何一个页面都会携带,服务器就会认识。
Setting.py中,
这个app会拦截我们每次的request请求,在request
中找到session id,然后去数据表中进行查询。
然后通过session key
去找到session data
。此时直接为我们取出了user。
在服务器返回浏览器的response
中也会直接加上session id
cookie是浏览器本地存储机制,存在域名之下,存储不安全。
服务器在返回id时通过规则生成一串字符,并设置了过期时间。存储在服务器端(数据库)