问题:SESSION与COOKIE的区别?面试
一、cookie数据存放在客户的浏览器上,session数据放在服务器上。浏览器
二、cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。安全
三、cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,能够用来在某个WEB站点会话间持久的保持数据。性能优化
四、session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。服务器
五、单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。cookie
六、session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session实际上是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上建立了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过时了。
注:为这个用户建立的Cookie的名称是aspsessionid。这个Cookie的惟一目的就是为每个用户提供不一样的身份认证。session
七、cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。工具
session详解性能
一、Session何时失效?优化
a. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。
b. 调用Session的invalidate方法。
二、Session对浏览器的要求:
虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然须要客户端浏览器的支持。这是由于Session须要使用Cookie做为识别标志。HTTP协议是无状态的,Session不能依据HTTP链接来判断是否为同一客户,所以服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
该Cookie为服务器自动生成的,它的maxAge属性通常为-1,表示仅当前浏览器内有效,而且各浏览器窗口间不共享,关闭浏览器就会失效。所以同一机器的两个浏览器窗口访问服务器时,会生成两个不一样的Session。可是由浏览器窗口内的连接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,所以会共享一个Session。
注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在连接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口即可以访问父窗口的Session。
若是客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另外一种解决方案:URL地址重写。
URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器可以解析重写后的URL获取Session的id。这样即便客户端不支持Cookie,也可使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。若是客户端支持Cookie,会将URL原封不动地输出来。若是客户端不支持Cookie,则会将用户Session的id重写到URL中。
注意:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,可是因为第一次请求时不会携带任何Cookie(由于并没有任何Cookie能够携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,所以URL地址重写后的地址中就不会带有jsessionid了。
Cookie详解
Cookie老是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。
内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过时时间,除非用户手工清理或到了过时时间,硬盘Cookie不会被删除,其存在时间是长期的。因此,按存在时间,可分为非持久Cookie和持久Cookie。
一、用途
由于HTTP协议是无状态的,即服务器不知道用户上一次作了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结账时,因为HTTP的无状态性,不经过额外的手段,服务器并不知道用户到底买了什么。因此Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器能够设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另外一个页面,浏览器会把Cookie发送给服务器,因而服务器知道他以前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结账时,服务器读取发送来的Cookie就好了。
Cookie另外一个典型的应用是当登陆一个网站时,网站每每会请求用户输入用户名和密码,而且用户能够勾选“下次自动登陆”。若是勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登陆了。这正是由于前一次登陆时,服务器发送了包含登陆凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登陆时,(若是该Cookie还没有到期)浏览器会发送该Cookie,服务器验证凭据,因而没必要输入用户名和密码就让用户登陆了。
二、Cookie的缺陷
a. cookie会被附加在每一个HTTP请求中,因此无形中增长了流量。
b. 因为在HTTP请求中的cookie是明文传递的,因此安全性成问题。(除非用HTTPS)
c. Cookie的大小限制在4KB左右。对于复杂的存储需求来讲是不够用的。[2]
三、使用和禁用Cookies
用户能够改变浏览器的设置,以使用或者禁用Cookies。同时一些浏览器自带或安装开发者工具包容许用户查看,修改或删除特定网站的Cookies信息。
四、识别功能
若是在一台计算机中安装多个浏览器,每一个浏览器都会以独立的空间存放cookie。由于cookie中不但能够确认用户,还能包含计算机和浏览器的信息,因此一个用户用不一样的浏览器登陆或者用不一样的计算机登陆,都会获得不一样的cookie信息,另外一方面,对于在同一台计算机上使用同一浏览器的多用户群,cookie不会区分他们的身份,除非他们使用不一样的用户名登陆。
五、隐私,安全和广告
Cookies在某种程度上说已经严重危及用户的隐私和安全。其中的一种方法是:一些公司的高层人员为了某种目的(譬如市场调研)而访问了从未去过的网站(经过搜索引擎查到的),而这些网站包含了一种叫作网页臭虫的图片,该图片透明,且只有一个象素大小(以便隐藏),它们的做用是将全部访问过此页面的计算机写入cookie。然后,电子商务网站将读取这些cookie信息,并寻找写入这些cookie的网站,随即发送包含了针对这个网站的相关产品广告的垃圾邮件给这些高级人员。
六、Cookies的替代品
鉴于cookie的局限和反对者的声音,有以下一些替代方法:
Brownie方案,是一项开放源代码工程,由SourceForge发起。Brownie曾被用以共享在不一样域中的接入,而cookies则被构想成单一域中的接入。这项方案已经中止开发。
P3P,用以让用户得到更多控制我的隐私权利的协议。在浏览网站时,它相似于cookie。
在与服务器传输数据时,经过在地址后面添加惟一查询串,让服务器识别是否合法用户,也能够避免使用cookie。