7、Cookie、Session
7.1、会话
会话:用户打开了一个浏览器,点击了很多链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,增经来过,称之为有状态会话;
一个网站怎么证明你来过了?
客户端 服务端
1.服务器给客户端一个信件就可以了; cookie
2.服务器登录记你来过了,下次你来的时候我来匹配你; seesion
7.2、保存会话的两种技术
cookie
- 客户端技术(响应,请求)
session
- 服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或者数据放在Session中!
常见场景:网站登录之后,你下次不用再登陆了,第二次访问直接就上去了!
7.3、Cookie
1.从请求中拿到cookie信息
2.服务器响应给客户端cookie
1 Cookie[] cookies = req.getCookies();//获得Cookie 2 cookie.getName(); //获得cookie中的key 3 cookie.getValue(); //获得cookie中的value 4 new Cookie("lastLoginTime", System.currentTimeMillis()+"");//新建一个cookie 5 cookie.setMaxAge(24*60*60);//设置cookie的有效期 6 resp.addCookie(cookie);//响应给客户端
cookie:一般会保存在本地的用户目录下 appdata;
一个网站cookie是否存在上限!聊聊细节问题
- 一个Cookie只能保存一个信息;
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;
- Cookie大小有限制4kb;
- 300个cookie浏览器上限
删除Cookie;
- 不设置有效期,关闭浏览器,自动失效;
- 设置有效期时间为0;
编码解码:
1 URLEncoder.encode("王刘","utf-8")
2 URLDecoder.decode(cookie.getValue(),"utf-8")
7.4、Session(重点)
什么是Session:
- 服务器会给每一个用户(浏览器)创建一个Session对象;
- 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
- 用户登录之后,整个网站它都可以访问! -->保存用户的信息;保存购物车的信息......
Session和Cookie的区别:
- Cookie是把用户的数据写给用户浏览器,浏览器保存
- Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
- Session对由服务器创建;
使用场景
- 保存一个登录用户的信息;
- 购物车信息;
- 在整个网站中经常会使用的数据,我们将它保存在Session中;
使用Session
1 package com.kuang.servlet; 2 3 import com.kuang.pojo.Person; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.*; 7 import java.io.IOException; 8 9 public class SessionDemo01 extends HttpServlet { 10 @Override 11 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 12 13 //解决乱码问题 14 req.setCharacterEncoding("utf-8"); 15 resp.setCharacterEncoding("utf-8"); 16 resp.setContentType("text/html;charset=utf-8"); 17 18 //得到Session 19 HttpSession session = req.getSession(); 20 21 //给Session中存东西 22 session.setAttribute("name",new Person("王刘",22)); 23 24 //获取Session的ID 25 String sessionId = session.getId(); 26 27 //判断Session是不是新创建的 28 if (session.isNew()) { 29 resp.getWriter().write("session创建成功,ID:"+sessionId); 30 }else { 31 resp.getWriter().write("session已经在服务器中存在了,ID:"+sessionId); 32 } 33 34 //Session创建的时候做了什么事情; 35 // Cookie cookie = new Cookie("JSESSIONID", sessionId); 36 // resp.addCookie(cookie); 37 38 } 39 40 @Override 41 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 42 doGet(req, resp); 43 } 44 }
1 package com.kuang.servlet; 2 3 import com.kuang.pojo.Person; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import javax.servlet.http.HttpSession; 10 import java.io.IOException; 11 12 public class SessionDemo02 extends HttpServlet { 13 @Override 14 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 15 16 //解决乱码问题 17 req.setCharacterEncoding("utf-8"); 18 resp.setCharacterEncoding("utf-8"); 19 resp.setContentType("text/html;charset=utf-8"); 20 21 //得到Session 22 HttpSession session = req.getSession(); 23 24 Person person = (Person) session.getAttribute("name"); 25 26 System.out.println(person.toString()); 27 28 } 29 30 @Override 31 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 32 doGet(req, resp); 33 } 34 }
package com.kuang.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; public class SessionDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); session.removeAttribute("name");
//手动注销Session session.invalidate(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
会话自动过期:
<!--设置Session默认的失效时间-->
<session-config>
<!--15分钟后Session自动失效,以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>

浙公网安备 33010602011771号