学习第三天——cookie/session

会话

会话:浏览器和服务器进行通信

保存会话的两种技术

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在服务器与客户端交换

Guess you like

Origin blog.csdn.net/qq_46631261/article/details/121237511