发表于: 2018-05-19 22:10:43

1 1206



day50




今天完成的事情:     


1.什么是session?什么是cookie?session和cookie有什么区别?什么场景适用于session?什么场景适用于cookie?

session是浏览器给每个访问者创建的回话对象,并用sessionID标记每个不同来访者(浏览器),因为http是无状态的,所以关于该来访者任何信息都可以记录在这里,比如上次登录时间等等。但是因为session毕竟耗内存,一般不是重要数据尽量频繁使用,有的大型网站会转发用一个服务器来存放所有用户的session。

cookie和session最明显的区别是,cookie是存放在浏览器端的,服务端在response里设置响应头"set-cookie : cookiename=cookievalue; ...... ", 这样浏览器在下次访问有效路径时,就会带着这个之前被定义过的cookie来访问。在cookie里存放一些用户状态信息,可以弥补session占内存的不足,又可以解决http无状态的缺点


session的场景用于数据共享,通过request.getSession, 会从携带的cookie里获得之前被标记过的 jsession里拿到sessionID,通过sessionID可以从服务器里找到唯一的和该访问者对于的对象,里面有它的来访信息。

cookie用于一些不太重要敏感的信息的暂时存储。



2.拦截器、过滤器、监听器各有什么作用?


小课堂csdn链接:

https://blog.csdn.net/qq_19396391/article/details/80342198


                
明天计划的事情:    


解决今天的密钥空指针异常问题。

                    
遇到的问题:   
  


任务五的程序在本地运行没问题,但是部署后出现空指针异常,查询后台日志发现是因为没有获得密钥来解密token导致的。


这种问题没有发生在本地仅发生 在服务端,我仔细想了下明白了原因:


其实如果我一直访问一个容器也不会出异常,但是按我的习惯,我把任务五项目一键部署到了三个容器,然后分别切换端口号访问,一切换就会出问题,原因就出在这里,因为假如说我第一个访问了tomcat, tomcat 容器里有了我的sessionid并创建了回话对象,这时我继续访问此tomcat没有任何问题,但是如果我突然访问jetty或resin,而且是访问的带/u的要被拦截器验证的页面,这是拦截器拦截到了我的token,要解密了,但是从session里没有获得密钥(说一下我的密钥机制,我是给每个访问者分配独立随机的密钥并放在session中用于该用户下次访问时可以拿出来解密), 其实这就是后面负载均衡有可能遇到的session共享问题,我的session仅在tomcat中有,当我再访问jetty或resin时,由于有效路径是按照 域名(ip)和contextpath来判断的,和端口号没关系, 所以依然会带着cookie去访问,然后一解密自然拿不到密钥,这种session共享问题在后面的任务中可以将负载均衡以iphash的方式分发请求,现在的解决办法就是将密钥定死一个值,虽然和之前相比安全性稍微下降(毕竟我之前的方式是给每个来访者创建56位的随机单独密钥),但是可以在现阶段解决session共享问题。


                  
收获:  


以前一直听说session共享的问题,但都是空泛的概念,今天真正遇到了,对它的认识更深刻了吧 ,所以有时候我就感觉,在你碰到bug的时候是你离计算机底层最近的时候,因为平时都在调用人家写好的API,没遇到的bug都是学习的机遇。


但我还是不想程序出问题啊,烦


                



返回列表 返回列表
评论

    分享到