当前位置: 首页 > news >正文

session和cookie自动登录机制

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时通过规则生成一串字符,并设置了过期时间。存储在服务器端(数据库)

相关文章:

  • 2019MSSCSTC赛前培训 # web方向
  • 基于区块链的去中心化交易系统
  • 电子商务创新
  • 基于区块链的数字版权保护介绍
  • 基于区块链的价值交易和管理系统
  • 区块链:去中心化的交易所方向
  • 星际文件存储IPFS是如何颠覆云存储的?
  • 使命、愿景、价值观
  • 前端Token存储问题
  • 为什么房产等实体资产不适合做同质化所有权拆分?
  • 市场营销+AI+区块链
  • 为什么NFT可安全实现无第三方担保交易
  • 腾讯千帆区块链云市场发布会
  • 陆奇万字演讲:世界新格局下的创业创新机会
  • 区块链积分体系
  • @jsonView过滤属性
  • Python学习之路13-记分
  • SegmentFault 2015 Top Rank
  • 阿里云前端周刊 - 第 26 期
  • 经典排序算法及其 Java 实现
  • 前嗅ForeSpider中数据浏览界面介绍
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 事件委托的小应用
  • 数据科学 第 3 章 11 字符串处理
  • 一个完整Java Web项目背后的密码
  • 主流的CSS水平和垂直居中技术大全
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • kubernetes资源对象--ingress
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​iOS安全加固方法及实现
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #Java第九次作业--输入输出流和文件操作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (23)Linux的软硬连接
  • (C#)获取字符编码的类
  • (C++)八皇后问题
  • (Java数据结构)ArrayList
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三)mysql_MYSQL(三)
  • (一)UDP基本编程步骤
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转) Android中ViewStub组件使用
  • (转)JAVA中的堆栈
  • (转)四层和七层负载均衡的区别
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证