浏览器在请求访问服务器开始,一直到访问浏览器结束,浏览器关闭为止,这期间浏览器和服务器之间产生的全部请求和响应加在一块儿,就称为浏览器和服务器之间的一次会话。 在一次会话中每每会产生一些数据,而这些数据须要咱们保存起来,例: *好比在没有登陆时,将商品记载到购物车,其实就是将商品信息存入到了coocie或者session中。
能够用cookie或者session保存会话中产生的数据数组
1:Cookie是将会话中产生的数据保存在客户端,属于客户端技术;
2:Cookie是基于两个头进行工做的:Set-Cookie响应头和Cookie请求头;
3:经过Set-Cookie响应头将Cookie从服务器发送到浏览器,让浏览器保存到内部;而浏览器一旦保存了Cookie,之后浏览器每次访问服务器时,都会经过Cookie请求头,将Cookie信息带回到服务器中。在须要时,在服务器端能够获取请求中Cookie的数据,从而实现一些功能;浏览器
1.建立Cookie对象安全
Cookie cookie = new Cookie(String name,Stringvalue); // 建立cookie的同时须要指定cookie的名字和cookie要保存的值 // Cookie的名字一旦指定后,就没法修改!
2.将Cookie添加到response响应中服务器
response.addCookie(Cookie cookie); // 将cookie添加到响应中,由服务器负责将cookie信息发送给浏览器,再由浏览器保存到内部(能够屡次调用该方法,添加一个以上的cookie
3.获取请求中的全部Cookie对象组成的数组cookie
Cookie[] cookie = request.getCookies(); // 获取请求中携带的全部cookie组成的cookie对象数组,若是请求中没有携带任何cookie,调用该方法会返回null。
4.删除浏览器中的Cookiesession
// cookie的API中没有提供直接删除cookie的方法,能够经过别的方式间接删除cookie // 删除名称为cart的cookie:能够向浏览器再发送一个同名的cookie(即名称也叫作cart),并设置cookie的最大生存时间为零,因为浏览器是根据cookie的名字来区分cookie,若是先后两次向浏览器发送同名的cookie,后发送的cookie会覆盖以前发送的cookie。然后发送的cookie设置了生存时间为零,所以浏览器收到后也会当即删除!
5.Cookie的经常使用方法:并发
cookie.getName(); // 获取cookie的名字 cookie.getValue(); // 获取cookie中保存的值 cookie.setValue(); // 设置/修改cookie中保存的值(没有setName方法,由于cookie的名字没法修改) cookie.setMaxAge(); //设置cookie的最大生存时间(若是不设置,cookie默认在一次会话结束时销毁!)
6.设置Cookie最大的生存时间(SetMaxAge):spa
cookie。setMaxAge(60) //单位为秒
示例:3d
1:Session是将会话中的产生的数据保存在服务器端,属于服务器端技术;
2:Session是一个域对象,Seesion中也保存了一个map集合,往Session中存数据,其实就是将数据保存到Session指定map集合中;
3:经过session.setAttribute()方法,能够将数据存入到Session中,经过session.getAttribute()方法能够将数据从session中取出来;code
获取session对象:
request.getSession() //获取一个Session对象,若是在服务器内部中由当前浏览器对应的session,则直接返回该session对象;若是没有对应的session,则会先建立一个新的session对象再返回;
Session是一个域对象,在session中也保存了一个map集合,而且sess中也提供了存取数据的方法,以下:
session.setAttribute(String attrName,Object attrValue); //往session域中添加一个域属性,属性名必须为字符串类型,属性值能够为任意类型 session。setAttribute(String attrName); //根据属性名能够获取域中的属性值,返回值是一个Object类型
Session域对象的三大特性:
建立session:
第一次调用request.getSession()方法时,会建立一个session对象。(当浏览器在服务器端没有对应的session时,调用request.getSession()方法,服务器会建立一个session对象)
销毁session:
1.超时销毁:
默认状况下,当超过30分钟没有访问session时,session就会超时销毁(30分钟是默认时间,能够修改);
2.自杀:
调用session的invalidate方法时,会当即销毁session;
3.意外身亡:
1)当服务器非正常关闭时(硬件损坏,断电,内存溢出等致使服务器非正常关闭),session会随着服务器的关闭而销毁;
2)当服务器正常关闭,在关闭以前,服务器会将内部的session对象序列化保存到服务器的work目录下,变为一个文件。这个过程叫作session的钝化(序列化);再次将服务器启动起来,钝化着的session会再次回到服务器,变为服务中的对象,这个过程叫作session的活化(反序列化);
在一次会话范围内(获取到的都是同一个session对象)
在整个会话范围内实现数据的共享
Cookie和Session都属于会话技术,均可以保存会话中产生的数据,可是因为Cookie和Session的工做原理和特色不一样,多以二者的应用场景也不一样。
1.Cookie是将会话中产生的数据存入到浏览器客户端,属于客户端技术(JS能够访问cookie)
2.Cookie是将数据保存到浏览器客户端,容易随着用户的操做致使cookie丢失或被窃取,所以cookie中保存的数据不太稳定,也不太安全
3.cookie中数据存在浏览器中,对服务器端没有太大影响,能够将数据保存很长时间
4.浏览器对cookie的大小和个数都有限制,通常每一个站点给浏览器发送的cookie不超过20个,每一个cookie大小不超过1KB
1.Session是将会话产生的内容存入到服务器端,属于服务器端技术
2.session将数据存入到服务器端的session对象中,相对来讲更加安全,稳定。不容易随着用户的操做而致使session中数据丢失
3.session是服务器端的对象,在并发量较高的时候,每个浏览器客户端在服务端都要对应一个session对象,占用服务器的内存空间,影响效率
将商品保存到session中后,关闭浏览器再打开浏览器,访问服务器,此时获取不到以前的session。由于session是基于Cookie工做的。
在服务器建立一个session后,会为session分配一个独一无二的编号,称之为session的id,在这次响应时,服务器会将session的id以一个名称为JSESSIONID的cookie发送给浏览器保存到浏览器内部。
因为保存sessionid的cookie默认是会话级别的cookie,在浏览器关闭后,cookie会跟着销毁,sessionid也丢失了。所以下次访问服务器,没有session的id就获取不到以前的session。也获取不到session中的商品信息
解决方法:咱们能够建立一个名称为JSESSIONID的cookie,其中保存session的ID,并设置cookie的最大存活时间,让cookie保存到硬盘上(即便浏览器关闭,cookie也不会销毁),这样下次访问服务器时,还能够将sessionid带给服务器,服务器能够经过sessionid获取到以前的session。 从session中获取到商品信息