Cookie和Session与会话跟踪技术
一、自己的理解
会话跟踪,客户端与服务器的交互称为会话,一次会话可能发生多次请求,从第一个请求开始,以知道最后一个请求结束,整个会话结束。
会话跟踪就是,在会话中产生的数据要实现共享,称为会话跟踪
作用域,"数据"可以共享在不同请求之内,还是在页面内,还是在整个会话中,还是在服务器中的所有应用,有所区别就是作用域的意义
常用的会话跟踪技术就是cookie
和session
Http是短连接,一次请求走完就关闭连接(无状态),这样一来服务器并不知道下一次请求的是不是同一个用户,应不应该给他某些响应,就是说,服务器不能根据请求连接来跟踪会话,那么就需要别的技术
二、Cookie
Cookie意为“甜饼”,由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie
2.1 Cookie原理
Cookie由服务器产生,游览器收到以后把请求保存在本地,当浏览器再次访问是,浏览器会自动携带上Cookie,这样一来,服务器就可以判断是谁来访问自己
Cookie需要浏览器支持,所以会出现一些网站会向用户发出是否同意保存Cookie,也可以提高用户的体验感
2.2 缺点
Cookie是保存在本地,这样来看,安全性就值得大大的考虑了,Cookie伪装,破解都有可能发生,虽然解决了(携带状态访问),但也带来了隐患
2.3 总结
服务器给每一个客户端Cookie分配一个"id",用户访问时就可以知道来访问的人是谁,出现原因是为了解决http无状态的问题
三、Session
Session这个东西查了很久并没有查到有关的时间,什么时候被提出,被什么公司提出,什么时候加入标准的。。。,以后再查
3.1 原理
web中使用比较多的还是Session,与Cookie不同,Session存储在服务器中,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 所以Session的存储也是键值对的形式,也是用来解决Http无状态连接的问题,客户端请求,然后服务器存储一个Session用来判断每一次请求的是不是同一个客户端
3.2 HttpSession
HttpSession是Java平台对session机制的实现规范,HttpSession是一个接口
3.3 其他问题总结
-
Session 什么时候被创建
注意:Session在用户进行访问,并且服务器调用
HttpServletRequest.getSession(true)
时才被创建 -
Session 什么时候被删除
三种情况
- 服务器调用
HttpSession.invalidate()
- Session 超时了
- 服务器进程停止
- 服务器调用
-
Session不会随浏览器关闭而消除,只有上卖弄三种方式才能消除
-
同一个浏览器两个页面访问的Session是相同的,不同浏览器访问的Session不相同
四、面试
-
cookie和session的区别
- cookie由服务器生成,存储在本地,Session 存储在服务器
- cookie相对来说不安全,因为存储在本地,会发生伪造,拦截等
- session存储在服务器,当访问增加后,会影响服务器的性能,而cookie存储在本地对服务器的压力更小一些
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
-
session产生的
session_id
放在cookie里面,如果用户把cookie禁止掉,是不是session也不能用Session可以通过其他方法获取session_id,通过url重写实现,在url中保存session信息
-
为什么session更安全
以上是一些资料总结和自己的理解,如果有误,敬请指正