一、解决的问题:
能解决很多很多的问题,目前碰到的场景:1)没有登录,不能看到登录后的其他页面;2)没有下单,不能看到下单成功的返回信息.....等等。假如没有cookie和session机制,http是无状态的,那么服务端就无法识别浏览器是不是首次登录,也就无法做出相应的判断;
二、单独使用cookie解决以上问题吗?
可以解决;以django为例,浏览器访问django后台,会默认发送cookie值(其实就是一个键值对),此时的cookie比如是{“IDIDIDID”:"12345"},在django后台的处理的过程中,对cookie进行一些操作(_set_cookie方法)新增一组键值对,此时的cookie值比如成了{“IDIDIDID”:"12345","name":"qinwei"},将cookie发送给浏览器。当浏览器再次访问后台时,会携带新的cookie,那么后台就可以对其cookie中的值进行判断,比如a = request.cookie.get("name"),if a == "qinwei" 返回一个登陆成功后才能展示的页面。如果不携带“name”这个键,那么肯定是首次登录,或者name这个键对应的值不是"qinwei",那么也不能返回成功后才能展示的页面,因为让其返回到登录页面。但是,如果仅仅使用cookie,那是不安全的,信息都存在浏览器本地的机器,别人很容易拿到这个cookie文件,后进行破坏性的操作。所有引入了session机制。
三、cookie和session协同使用:
session将信息默认存储在服务端数据库的表中,而只给浏览器返回一把解锁session的钥匙(一组很长很乱的字符串给cookie),即服务端发送给浏览器的cookie比如{“sessionid”:"yetwcnbbcksioekmggaczxpokeuww};比如登录功能,当浏览器访问后台时,浏览器会携带cookie,当后台匹配到正确的用户名和密码时,后台可以对session进行一系列的操作,request.session[‘username‘]=‘qinwei‘,给session新加一组键值对,返回个人主界面。当浏览器直接调个人主界面url的时候,后台这块可以做判断。a = request.session.get("username") if a == ‘qinwei‘ 那么证明浏览器之前登录成功过,可以给它返回个人主界面。如果没登录成功过或者压根从来么登录过,就不会有“username”这个键,我们就可以让它跳转到登录界面。
原文地址:https://www.cnblogs.com/qinweijujingyi/p/10177146.html