发表于: 2017-10-25 23:55:05

1 679


今天完成的事:

1.完成了一个步骤1的一个小Demo

首先session是HttpSession对象,该对象中可以存放任务值,还包括一些默认值。具体看该博客非常好

http://lavasoft.blog.51cto.com/62575/275589


什么是cookie,我的理解就是cookie能够存储一段信息在客户端本地,当访问cookie指定的携带的URL时会自动带上,服务器端拿到这个cookie能够做验证等等工作。比如最常用的就是登录验证,在用户第一次登录的时候判断用户名密码是否正确之后通过用户名(推荐能在数据库用户表中唯一标示该用户的字段)和最后登录时间(数据库用户表中的字段)来进行加密(DES)得到一个Sring,加密后new 一个Cookie对象,将这个加密后的String作为cookie的参数。可查看该链接:http://www.360doc.com/content/10/0130/15/339215_14733482.shtml

对于cookie最常用的几个方法就是

最后通过将Cookie添加到响应对象中返回到客户端

可以通过chrome浏览器查看cookie值:


因为Session的默认有效期是当浏览器关闭之后断开(服务器内存中释放对应HttpSession对象)。所以如果将cookie放置到Session中,然后在拦截器逻辑代码中获取HttpSession并拿到Cookie来判断是否登录仅限浏览器未关闭前(因为浏览器关闭之后HttpSession对象就被销毁了,无法拿到存储在Session中的Cookie,当下次打开浏览器访问时是新的httpSession)。


为了避免这种情况,我们可以通过在第一次登录时将用户名(推荐能在数据库用户表中唯一标示该用户的字段),更新数据库表中该用户最后一次登录时间的值并和用户名一起通过DES加密,加密后的数据作为Cookie存放到响应对象中到客户端。而拦截器逻辑代码中可以是这样一个流程来判断是否需要重新登录:

判断是否存有login名的Cookie,如果有则解密获取用户名和最后登录时间,通过用户名或最后登录时间到数据库取该用户的数据,如果数据库表中有该用户的值,那么返回。将数据库表返回的值和解密后的用户名和密码比对是否一致,一致说明cookie正确且未被篡改,无需登录,直接访问目标页面。如果其中有一项为false那么直接重定向到登录页面进行登录。如下图: 该方式优缺点,第一是每次都要访问数据库拉取数据肯定是耗时的。第二就是如果不是真有需求的话不安全。



下面讲讲如何来通过将cookie放置到HttpSession中,并在拦截器逻辑代码里通过获取Session里的cookie和请求对象中的cookie比对完成认证:(该方式缺点就是无法即使在关闭浏览器的情况下重新通过浏览器发送请求需要进行登录)

加入Cookie到Session对象中,如下图:

然后在拦截器逻辑代码中的逻辑是:

步骤一的Demo代码和处理逻辑是使用了上述的第二种,通过获取Session中的cookie比对完成验证

2.完成了步骤2

步骤二的代码和处理逻辑是使用了上面所述的第一种,就是通过在数据库中拉取数据比对验证。

步骤二也就那么回事,要主要对于需要登录才能访问的页面URL统一以/u前缀开始


明天计划的事:

1提交任务5,再看看Session和cookie的概念

2.做做任务6


遇到的困难:

困难倒是算不上,就是说对于登录页面的URL该如何定义符合rest风格的restFul呢,因为使用login或者sinin都是动词了,跟rest风格倡导的面向资源不符合了。


收获:

了解了Session和Cookie相关的概念,并有了一定的使用经验。


返回列表 返回列表
评论

    分享到