一.会话技术
1.需求:因为Http协议是无状态的,意思是每个客户访问服务器的资源的时候,服务器不知道谁是谁,所以就需要一个技术来帮助识别客户端的状态
2.功能:在浏览器第一次给服务器资源发送请求的时候建立会话,直到一边断开为止.记作一次会话. 在一次会话的范围内的多次请求有共享数据.
3.方式:
①存储在客户端的:Cookie -----可以减小服务器的存储压力,但是安全系不好可以被客户端清除
②存储在服务器端的:Session ----安全性相对较好,但是服务器压力较大
二.Cookie技术
1.创建与发送
Cookie cookie = new Cookie(String name, String value); ---创建
response.addCookie(cookie); ----响应发送Cookie
2.服务器端获取Cookie的数据
Cookie[ ] cookies = request.getCookies();
for( Cookie cookie : cookies ) {
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
}
3.一些注意事项
3.1一次可以发送多个cookie,可以一次创建多个Cookie对象
3.2通过setMaxAge(int seconds)可以实现持久化存储.(输入负数是使用默认值,输入零是删除cookie信息)
3.3在tomcat8之前cookie中不能直接存储中文,在tomcat8之后,cookie支持中文数据但是不支持特殊字符.建议使用URL解码解析
3.4在一个tomcat服务器中,部署多个web项目,在默认的情况下是不能共享cookie的,如果需要共享,可以使用setPath(String path)将path设置为"/" (ps.就算是不同的服务器,通过setDomian函数设置相同的一级域名/尾缀也是可以实现的)
3.5cookie是存在客户端的,不能存储任意类型的数据,只能存储String,json格式并且存储大小有限制
三.Session
1.使用:
3.1 获取: HttpSession session = request.getSession();
3.2 使用HttpSession对象 Object getAttribute(String name)
void setAttribute(String name,Object value) void removeAttribute(String name)
2.一些注意事项
①.在客户端关闭后,服务器不关闭,两次获取的session在默认情况下不是同一个
可以通过 Cookie cookie = new Cookie("JESSIONID",session.getId())创建Cookie,键设置为JESSIONID,设置最大存活时间
②.客户端不关闭,服务器关闭之后,session会钝化,在服务器正常关闭之前将session对象序列化到硬盘伤,在服务器启动之后将session文件转化为内容相同的新的session对象
③.销毁时间: 服务器关闭/session对象调用invalidate()手动销毁/失效时间过去(默认是30分钟)
3.特点:存在服务器端,可以存储任意类型任意大小的数据