会话
会话:浏览器和服务器进行通信
保存会话的两种技术
1、cookie
cookie作用:可以保留用户数据在浏览器,不会因浏览器关闭而消失
原理:一种客户端技术
-
当浏览器第一次访问服务器时,服务器会给浏览器响应一个cookie
-
浏览器接收到cookie,会将cookie保存在内存或硬盘中
-
当浏览器再次访问同一浏览器时,会携带保留的cookie
-
服务器会对得到的cookie进行处理
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文编码问题
req.setCharacterEncoding("gbk");
resp.setCharacterEncoding("gbk");
PrintWriter out = resp.getWriter();
//获取cookie
Cookie[] cookies = req.getCookies(); //从服务器获取,返回集合
if (cookies!=null){
out.write("上一次:");
for (Cookie cookie : cookies) {
boolean name = cookie.getName().equals("name");
if (name){
String value = cookie.getValue();
out.write("name:"+ URLDecoder.decode(value,"gbk"));
}
}
}
//响应cookie
Cookie cookie = new Cookie("name", URLEncoder.encode("苏大周", "gbk"));
resp.addCookie(cookie);
}
cookie的生存时间
cookie.setMaxAge(); //参数为int型整数,以秒为单位
-
time<0:默认,当浏览器关闭时cookie会消失,否则一直存在
-
time=0:不保存cookie,响应结束就消失,可用于删除已有cookie
//setMaxAge(0)用于删除同名已经存在的cookie Cookie cookie = new Cookie("name1","asdf"); resp.addCookie(cookie); cookie.setMaxAge(1000); Cookie cookie1 = new Cookie("name1", "as"); cookie1.setMaxAge(0); resp.addCookie(cookie1);
-
time>0:规定了cookie的生存时间,关闭浏览器不会消失
2、session
作用:保留用户数据
原理:一种服务器技术
-
当浏览器访问服务器时,服务器创建一个独立唯一session对象
-
该session对象保存在服务器端,并将sessionId通过cooike响应给浏览器
-
下一次浏览器访问时,通过cookie将sessionId发给服务器,服务器找到对应的session对象
//得到session
HttpSession session = req.getSession();
//给session存数据
session.setAttribute("name","asd");
//获取session的id
String id = session.getId();
//判断session是不是new
if(session.isNew()){
resp.getWriter().write("session创建成功,ID:"+id);
}else{
resp.getWriter().write("session已经创建,ID"+id);
}
//删除session
session.invalidate();
session已经创建,ID29A9D5C3E879D869F306ED362AD1037D
Cookie: JSESSIONID=29A9D5C3E879D869F306ED362AD1037D
可见:sessionId保存在cooike中,通过cookie在服务器与客户端交换
session的存数据
session.setAttribute("name",new Person("asd"));//对象
session.setAttribute("name","asd"); //数值
session的生存时间
- session保存在服务器,一定时间没有使用session的话,会注销该session。
session和cookie的区别
-
session为服务器端技术,session保存在服务器
-
cookie为客户端技术,cookie保存在客户端
-
sessionId保存在cooike中,通过cookie在服务器与客户端交换