发表于: 2017-08-05 21:51:41

2 1001


一.今天完成的主要事情

1.深入了解cookie,session以及tooken.

       谈一下自己的理解,首先,都是一种记录客户登陆信息,使客户在一定时间内免登陆的手段.

       cookie是在客户首次登录成功之后,服务器生成一段有关于客户的信息,通过response发送至客户浏览器,客户会保存这段信息,下次访问服务器时,客户带着这段信息,服务器检查这段信息,如果记录的和自己当初发放的一致,那么就直接通过,不用再验证账密(前提是cookie没有过期).

       session是在客户首次登陆之后,服务器自己保存一段客户的有关信息,然后发送给客户一个sessionID,下次访问时,客户会拿着这段sessionId访问,服务器根据用户的sessionId和自己保存的信息进行比对,两者一致后放行.

       所以可以看出两者个区别主要在于cookie是存放在客户端的,session是存放在服务器的,那么相应的,cookie的安全性要更低一些,因为如果有人恶意的获取到用户存储的cookie,就可以伪装成用户进行登陆,一般用于不牵扯重要信息的网站.因为不用在服务器上保存信息,所以在性能上要更高一些.session因为是保存在服务器上,所以安全性更高一些,但是如果将session携带的信息保存在数据库中,那么每次用户访问时都要比对数据库中的数据,当用户数量很多时,性能会急剧而下,用户体验很差,如果将session携带的信息保存在服务器内存中,如果用户量比较大时,就会因为占用过多的内存造成服务器性能下降.所以session一般用于对安全性比较高的认证中.而且,session还有一个问题就是不能跨域,因为是保存在服务器上的,如果负载均衡时分配了另一台服务器,那么session就无效了.

      至于tooken,个人感觉是为了解决session的缺点而创造出来的,它和cookie差不多,只是服务器创建的不是cookie,而是根据一定的算法生成token令牌,这个令牌可以保存在cookie中,但是cookie不再担负认证的功能,只作为token令牌的负载,也可以放在HTTP请求头中发送,用户下次访问服务器时携带token令牌,服务器只需要验证token令牌即可.它的优点是可以跨域,安全性高等等很多...

2.实现cookie的登陆验证方式

今天实际上对以上概念纠结了很久,不是说概念难懂,而是具体实现.我看了几个师兄的关于cookie的实现,发现有的是接收到cookie之后取出其中的数据和数据库中的数据又比对了一遍,有的是没有用数据库中的数据,个人认为,从概念上出发,cookie应该是不用再去比对数据库的.那么如果不比对数据库,服务器如何知道接收到的cookie是自己签发的合法的cookie呢?想了很久,想到一种方式,不多说,直接上代码

代码基本和昨天一样,只是在首次登录,账密和数据库中的匹配之后有区别,还有就是拦截器有所改动

先是登录成功之后:

思路是先对用户名和登陆时间加密,然后再将用户名和登录时间按照某种规则再加密,当然也可以使用其他的加密手段,这里为方便演示,只是简单的加了几个字符.然后将这三个加密后的内容生成cookie,发送给客户端.

接下来是拦截器中的代码

先获取到cookie名对应的值.然后将username和loginTime的值按照前面定义好的规则在用MD5加密一遍,然后和第三个cookie的值比较,如果相同就说明认证通过,如果不同,则说明不通过

2.编写了cookie 的操作类,具体代码会在提交任务时上传

3.初步了解MD5加密(只是直接找实例来用,对于算法没有深入研究)

二.明天计划完成的事情

1.准备小课堂

2.完成session的认证机制.

3.如果有时间,学习下MD5加密的实现算法

三.遇到的问题

在网上大概找了下,发现没有基于jwt生成token,然后采用token认证的实例,不知道师兄有没有好的资料分享下

四.收获

上面的内容都是我自己理解之后敲出来的,没有复制粘贴,所以今天的收获应该是对cookie,session的理解更加深入了吧.


返回列表 返回列表
评论

    分享到