6-6 django在线教育平台----session和cookie在线登录机制

1、cookie

cookie本地存储机制,是一个dict

首先看下http无状态请求

同个用户发出两次请求,请求1和请求2是没有联系的

这里写图片描述

有状态请求

用户第一次发出请求,服务器会分配给用户一个id,这个id保存到用户浏览器本地的cookie中,保存在各个浏览器的域之下,不能跨域请求,当再次请求时会带上这个id,服务器会根据id识别用户

这里写图片描述

访问百度首页,查看cookie信息

这里写图片描述

将服务器给浏览器的信息存储在本地cookie中,当再次向服务器发出请求时,可以将信息带回给服务器,如果将信息中的用户名和密码保存在本地cookie中,就不用每次登录都要重写用户名和密码了,但是这样很容易泄露,不安全

2、session

为了解决上述的不安全隐患,引出了session机制

login根据用户的信息生成了sessionid,这个id保存在数据库当中

这里写图片描述

查看数据库,删除掉之前的记录,后台退出登录后再重新登录,再次查看数据库

这里写图片描述

数据库生成了一条记录,这里的session_key就是sessionid,session_data是将用户信息的进行了加密,为了安全,每个id都有有效期expire_date,所以session是服务器生成并保存在服务器端的,服务器端的session_key会返回给浏览器,并保存在用户浏览器cookie中,这样通过session和cookie机制就保证了安全

这里写图片描述

在浏览器中查看cookie

这里写图片描述

后端逻辑是如何实现通过sessionid得到用户信息如用户名和密码等完成自动登录的?

django中有个自带的app,django.contrib.sessions,对每次浏览器的request和response进行拦截,request请求时会根据拦截的sessionid去数据库查询,与数据库中的session_key作对比,对比通过,会取出session_data并进行解密,返回response时会加上sessionid

这里写图片描述

3、cookie与session的区别

cookie数据保存在客户端,session数据保存在服务器端

cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session

session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

有关详细的cookie和session参考:https://www.cnblogs.com/andy-zhou/p/5360107.html

猜你喜欢

转载自blog.csdn.net/f1ngf1ngy1ng/article/details/80937364
今日推荐