1.会话
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
2.cookie
1.定义:保存在浏览器中的键值对格式的文本信息
2.Django中写cookie: response.set_cookie(键,值,max_age=秒), 默认浏览器关闭过期
3.Django读cookie: request.COOKIE.get(键)
当浏览器保存了某个域名的cookie后,再次访问这个域时,会自动将这些cookie信息包含在请求报文头中,发给服务器
3.session
1.定义====>保存在服务器中的键值对格式的信息,内容会被加密
2.保存方式
1.关系型数据库
2.缓存====> 本地内存
文件
nosql数据库,如 redis=====>最常用
3.上面两种方式的混合
3.在Django中操作session,保存在redis中的简单步骤
1.配置setting.py
2.写:request.session[键]=值
3.读:request.session.get(键)
4. session保存/获取流程流程图
需要明确的是:session依赖于cookie
步骤如下:
第一步: 浏览器访问A网站====>1.服务器端首次写入session,如session["name"] = "ywk"
2.服务器端生成唯一标识符(随机字符串)
3.服务器端向redis中保存=====>格式:键值对
键:唯一标识符
值:加密的字典:{"name":"ywk"} # 在redis中保存的键值对并不是name:ywk
4.服务器端将唯一标识符保存到cookie中===>格式:键值对
键:session_id
值:唯一标识符(如图所示)
5.到此就能保存每个用户的浏览器保存的session信息都不一样
第二步: 浏览器保存服务器返回的cookie信息
第三步: 当用户再次访问该网站时,浏览器自动携带所有相关的cookie信息(包括session_id)
====>1.服务器读取cookie,从中获取到session_id
2.根据session_id获取对应的唯一标识符
3.通过唯一标识符,作为键 ,去redis中获取对应的值(加密的字典{"name":"ywk"})
4.解密字典,获取session真正的信息
如果你和我有共同爱好,我们可以加个好友一起交流!