共同点
cookie和session都是用来跟踪浏览器用户身份的会话方式。
Cookie的工作原理
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
Session的工作原理
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID,value为sessionId),然后将该Cookie发送至浏览器端
(2)浏览器端再次发送请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie
name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
ID为sessionId的Session对象不存在(Session对象默认存活30分钟),返回1中重新去创建Session与特殊的Cookie
ID为sessionId的Session对象存在,则返回session对象
区别
cookie数据保存在客户端,session数据保存在服务端。
Session
如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,安全性高。
cookie
如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。
如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。
区别总结
- (1)cookie数据存放在客户的浏览器上,session数据放在服务器上
- (2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
- (3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
- (4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K。
- (5)将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中。
- (6)在存储的数据量方面:session 能够存储任意的java 对象,cookie 只能存储 String 类型的对象。
面试常问
1. Session产生的session_id放在Cookie里面,如果用户把Cookie禁止掉,是不是Session也不能用了呢?
禁止掉Cookie后,Session可以用,不过通过其他的方式来获得这个sessionid,比如,可以写入url中,或者以表单的形势提交到服务器端。从而使服务器端获取相应的用户数据。
2. 为什么说Session 比Cookie更安全?
攻破Session:
第一步:获取sessionId,sessionId是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。
第二步:获取有效sessionId,sessionId是加密的,第二次session_start的时候,前一次的sessionId就没有用了,Session过期时sessionId也会失效,想在短时间内攻破加了密的 sessionId很难。
攻破Cookie:
截获cookie变量,然后伪造一个数据包
入侵机器,将cookie拷走,就可伪造身份登录