一、会话
什么是会话呢???
当浏览器发送申请拜访服务器开始,始终到拜访服务器完结,浏览器敞开为止,这期间浏览器和服务器之间产生的所有申请和响应加在一起,就称之为浏览器和服务器之间的一次会话。
在一次会话中往往会产生一些数据,而这些数据往往是须要咱们保存起来的。
那么如何保留会话中产生的数据呢?
!!能够应用cookie或session保留会话中产生的数据。
二、cookie
cookie的工作原理
(1)Cookie是将会话中产生的数据保留在浏览器客户端,是客户端技术
(2)Cookie是基于两个头进行工作的: 别离是Set-Cookie响应头和Cookie申请头:
服务器在响应中给浏览器发送Cookie时,是通过Set-Cookie响应头将cookie从服务器端发送给客户端浏览器,让浏览器保留到外部;而浏览器外部一旦保留了cookie,当前浏览器每次拜访服务器时,都会通过cookie申请头,将cookie信息从浏览器再带回服务器端,如果服务器端须要,能够获取申请中的cookie,从cookie中获取保留的数据,从而实现某些性能。
cookie的API及利用
1、创立Cookie对象
`Cookie c = new Cookie(String name, String value);
// 创立Cookie的同时须要制订Cookie的名字 以及 cookie中要保留的值(数据)`
2、将Cookie增加到response响应中
`response.addCookie( Cookie c );
// 将Cookie增加到response响应中, 由服务器负责将cookie信息发送给浏览器, 再由浏览器保留到外部
// 能够屡次调用该办法, 增加一个以上的cookie`
3、获取申请中的所有cookie对象组成的数组
`Cookie[] cs = request.getCookies();
// 获取申请中携带的所有cookie组成的cookie对象数组;
// 如果申请中没有携带任何cookie, 调用该办法会返回null值。`
4、删除浏览器中的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 );`
5、Cookie的罕用办法
`cookie.getName() //获取cookie的名字
cookie.getValue() //获取cookie中保留的值
cookie.setValue() //设置/批改cookie中保留的值(没有setName办法,因为cookie的名字无奈批改)
cookie.setMaxAge() //设置cookie的最大生存工夫`
三、session
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)次要性能:在一次会话范畴内实现数据的共享
cookie和session的区别
Session和cookie都属于会话技术, 都能够用于保留会话中产生的数据, 但因为Cookie和Session的工作原理和特点不同, 因而两者的利用场景也不一样。
cookie的特点
1、cookie是将会话中产生的数据保留在浏览器客户端, 是客户端技术
2、cookie是将数据保留在客户端浏览器,容易随着用户的操作导致cookie失落或者被窃取,因而cookie中保留的数据不太稳固,也不太平安。
但cookie将数据保留在客户端,对服务器端没有太多影响,能够将数据保留很长时间。
因而cookie中适宜存储须要长时间保留的数据,但对安全性要求不高。
3、浏览器对cookie的大小和个数都有限度,个别举荐每一个站点给浏览器发送的cookie数量不超过20个,每一个cookie的大小不超过1kb。
Cookie的利用:实现购物车、记住用户名、30天内主动登录等。
session的特点
1、session是将会话中产生的数据保留在服务器端,是服务器端技术
2、session将数据存在服务器端的session对象中,绝对更加的平安,而且更加稳固。不容易随着用户的操作而导致session中的数据失落或者是被窃取。
但session是服务器端的对象,在并发量较高时每一个浏览器客户端在服务器端都要对应一个session对象,占用服务器的内存空间,影响效率。
因而session中适宜存储对安全性要求较高,但不须要长时间保留的数据。
Session的利用:保留登录状态、保留验证码