什么是会话呢???
当浏览器发送请求访问服务器开始,一直到访问服务器结束,浏览器关闭为止,这期间浏览器和服务器之间产生的全部请求和响应加在一块儿,就称之为浏览器和服务器之间的一次会话。
在一次会话中每每会产生一些数据,而这些数据每每是须要咱们保存起来的。数组
那么如何保存会话中产生的数据呢?浏览器
!!可使用cookie或session保存会话中产生的数据。安全
cookie的工做原理服务器
(1)Cookie是将会话中产生的数据保存在浏览器客户端,是客户端技术
(2)Cookie是基于两个头进行工做的: 分别是Set-Cookie响应头和Cookie请求头:
服务器在响应中给浏览器发送Cookie时,是经过Set-Cookie响应头将cookie从服务器端发送给客户端浏览器,让浏览器保存到内部;而浏览器内部一旦保存了cookie,之后浏览器每次访问服务器时,都会经过cookie请求头,将cookie信息从浏览器再带回服务器端,若是服务器端须要,能够获取请求中的cookie,从cookie中获取保存的数据,从而实现某些功能。cookie
cookie的API及应用session
一、建立Cookie对象
`Cookie c = new Cookie(String name, String value);
// 建立Cookie的同时须要制定Cookie的名字 以及 cookie中要保存的值(数据)`并发
二、将Cookie添加到response响应中
`response.addCookie( Cookie c );
// 将Cookie添加到response响应中, 由服务器负责将cookie信息发送给浏览器, 再由浏览器保存到内部
// 能够屡次调用该方法, 添加一个以上的cookie`对象
三、获取请求中的全部cookie对象组成的数组
`Cookie[] cs = request.getCookies();
// 获取请求中携带的全部cookie组成的cookie对象数组;
// 若是请求中没有携带任何cookie, 调用该方法会返回null值。`
四、删除浏览器中的Cookie
在cookie的API中没有提供直接将cookie删除的方法, 能够经过别的方式间接删除cookie
代码示例:删除名称为cart的cookie: 能够向浏览器再发送一个同名的cookie(即名称也叫cart),并设置cookie的最大生存时间为零,因为浏览器是根据cookie的名字来区分cookie,若是先后两次向浏览器发送同名的cookie,后发送的cookie会覆盖以前发送的cookie,然后发送的cookie也设置了生存时间为零,所以浏览器收到后也会当即删除!
`//建立一个名称为cart的cookie
Cookie c = new Cookie( "cart" , "" );
//设置cookie的最大生存时间为零
c.setMaxAge( 0 );
//将cookie添加到响应中,发送给浏览器
response.addCookie( c );`
五、Cookie的经常使用方法
`cookie.getName() //获取cookie的名字
cookie.getValue() //获取cookie中保存的值
cookie.setValue() //设置/修改cookie中保存的值(没有setName方法,由于cookie的名字没法修改)
cookie.setMaxAge() //设置cookie的最大生存时间`生命周期
session的工做原理
(1)session保存在服务器端,属于服务器端技术
(2)session是一个域对象,session中保存了一个map集合,往session中存数据,其实就是将数据保存到session的map集合中
(3)经过session.setAttribute方法能够将数据保存到session对象map集合中,经过session.getAttribute方法能够将数据从session中取出来。内存
session做为域对象使用
Session是一个域对象,所以session中也提供了存取数据的方法。
session.setAttribute(String attrName, Object attrValue);
//往session域中添加一个域属性, 属性名只能是字符串, 属性值能够是任意类型
session.getAttribute(String attrName);
//根据属性名获取session域中的属性值, 返回值是一个Object类型
如何获取session对象:
HttpSession session = request.getSession(); // 获取一个session对象, 若是在服务器内部有当前浏览器对应的session对象,则直接返回该session对象; 若是在服务器内部没有对应session, 则会建立一个新的session对象再返回。
Session域对象的三大特征:
(1)生命周期:
建立session: 在第一次调用request.getSession()方法时, 会建立一个session对象(当客户端在服务器端没有对应的session时, 调用request.getSession方法会让建立一个session对象并返回)
销毁session:
a)超时销毁: 默认状况下, 当超过30分钟没有访问session, session就会超时销毁(30分钟是默认时间,能够修改,但不推荐修改)
b)自杀: 调用session的invalidate方法, 会当即销毁session
c)意外身亡: 当服务器非正常关闭时(断电/硬件损坏/内存溢出等致使服务器意外关闭), session会随着服务器的关闭而销毁;
当服务器正常关闭, 在关闭以前, 服务器会将内部的session对象序列化保存到服务器的work目录下, 变为一个文件, 这个过程叫作session的序列化(也叫作钝化)。再次启动服务器, 钝化着的session会再次回到服务器,变为服务器中的session对象,这个过程叫作session的反序列化(活化)
(2)做用范围:(同一个客户端)在一次会话中,获取到的都是同一个session对象
(3)主要功能:在一次会话范围内实现数据的共享
Session和cookie都属于会话技术, 均可以用于保存会话中产生的数据, 但因为Cookie和Session的工做原理和特色不一样, 所以二者的应用场景也不同。
cookie的特色
一、cookie是将会话中产生的数据保存在浏览器客户端, 是客户端技术
二、cookie是将数据保存在客户端浏览器,容易随着用户的操做致使cookie丢失或者被窃取,所以cookie中保存的数据不太稳定,也不太安全。
但cookie将数据保存在客户端,对服务器端没有太多影响,能够将数据保存很长时间。
所以cookie中适合存储须要长时间保存的数据,但对安全性要求不高。
三、浏览器对cookie的大小和个数都有限制,通常推荐每个站点给浏览器发送的cookie数量不超过20个,每个cookie的大小不超过1kb。
Cookie的应用:实现购物车、记住用户名、30天内自动登陆等。
session的特色
一、session是将会话中产生的数据保存在服务器端,是服务器端技术
二、session将数据存在服务器端的session对象中,相对更加的安全,并且更加稳定。不容易随着用户的操做而致使session中的数据丢失或者是被窃取。
但session是服务器端的对象,在并发量较高时每个浏览器客户端在服务器端都要对应一个session对象,占用服务器的内存空间,影响效率。
所以session中适合存储对安全性要求较高,但不须要长时间保存的数据。
Session的应用:保存登陆状态、保存验证码