会话技术
会话:一次会话中包含多次请求和响应
一次会话:浏览器第一次给服务器资源发送请求,会话建立,只到有一方结束为止
功能:在一次会话的多次请求间共享数据
方式:
- 客户端会话技术:cookie
- 服务器端会话技术:session
cookie
cookie
1.概念:客户端会话技术,要求数据保存到客户端
2.快速入门
使用步骤
1.创建cookie对象绑定数据new Cookie(String name,String value);
2.发送cookie对象resp.addCookie(Cookie cookie);
3.获取cookies数据 req.getCookies();
代码实现
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
Cookie c=new Cookie("luo1","11");
Cookie c1=new Cookie("luo2","22");
Cookie c2=new Cookie("luo3","333");
resp.addCookie(c);
resp.addCookie(c1);
resp.addCookie(c2);
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for(Cookie c:cookies)
{
System.out.println(c);
String name = c.getName();//名字
String value = c.getValue();//值
System.out.println(name+" "+value);
}
}
cookie常见细节
1.一次可不可以发送多个cookie?可以(见上例)
2.cookie在浏览器中保存的时间
在默认情况下,浏览器关闭后cookie数据自动销毁
持久化存储
正数:cookie数据将持久化存储在硬盘中,正数大小为存活时间大小
负数:默认值
0:删除cookie信息
3.cookie能否存中文
Tomcat8之前不支持,Tomcat8之后支持但不支持特殊编码
4.cookie获取范围
Cookie特点和作用
- Cookie存储的客户端浏览器
- 浏览器对单个Cookie大小有限制(64k),对同一域名下Cookie大小也有限制(20个)
作用:
Cookie一般用于存储少量不敏感的数据
在不登录的情况下完成服务器对客户端的身份识别
session
session
1.概念:服务器会话技术,在一次会话的多次请求中获取数据,将数据保存到对象中
2.快速入门
1.获取HttpSession对象
HttpSession session = req.getSession();
2.使用HttpSession对象
void setAttribute(String name,Object value)
Object getAttribute(String name)
void removeAttribute(String name)
//设置
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.setAttribute("msg","你好吗");
}
//获取
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
String msg =(String) session.getAttribute("msg");
System.out.println(msg);
}
细节
1.当客户端关闭,服务器端不关闭两次获取的Session是否一样?
默认下不是(session用于本次会话)
如果需要相同设置Cookie,键为JSESSIONID,设置最大存活时间
Cookie cookie = new Cookie("JSSIONID",session.getId());
cookie.setMaxAge(60*60);
resp.addCookie(cookie);
2.当客户端不关闭,服务器端关闭两次获取是Session是否一样?
不是同一个,但要确保数据不丢失
Session的钝化:在服务器关闭之前将对象系列化到硬盘上
Session的活化:在服务器启动后将Session文件转化为内存中的Session对象即可(Session的钝化和活化不能用idea执行,最好本地启动和关闭服务器)
3.Session的什么时候销毁
- 服务器被关闭
- Session对象调用invalidate();
- Session默认失效时间30分钟
Session的特点
1.Session用于存储一次会话的多次请求数据,存的服务器内
2.Session可以存储任意类型任意大小的数据
Session与Cookie区别
Session存在服务器端而Cookie存在客户端
session没有数据大小而cookie有
session数据安全性比cookie数据安全性高