1.首先聊聊Cookie
cookie:
- 一般会保存在本地的用户目录下appdata
- 一个Cookie只能保存一个信息;
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;
- cookie大小有限制4kb;
- 300个cookie浏览器上线;
删除Cookie - 不设置有效期,关闭浏览器,自动失效;
- 设置有效期时间为0;
public class SetCookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);//调入当前类的doget方法
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
Cookie pedCookie=new Cookie("password","root");
pedCookie.setMaxAge(-1);
//-1表示此cookie为永久响应
response.addCookie(pedCookie);
Cookie gwlCookie = new Cookie("gwl","lxj");
gwlCookie.setMaxAge(60);
response.addCookie(gwlCookie);
Cookie wcCookie = new Cookie(URLEncoder.encode("旺财","UTF-8"),"lxj");
gwlCookie.setMaxAge(60);
response.addCookie(gwlCookie);
//服务端从客户端取值
PrintWriter writer=response.getWriter();
Cookie[] cookies = request.getCookies();
if(cookies !=null){
writer.write("你上一次访问的时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(cookie.getName().equals("gwl")){
writer.write(URLDecoder.decode(cookie.getValue(),"UTF-8"));
}
}
}else {
writer.write("这是你第一次访问");
}
writer.println("<h1>cookie写入成功~</h1>");
}
}
2.聊聊Session
什么是session:
- 服务器给每一个用户(浏览器)创建一个对象;
- 一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在;
- 用户登录之后,整个网站它都可以访问:保存用户信息,保存购物车信息;
public class MySessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
// 操作 Session,尝试从客户端获取一个 session,如果获取
// 失败,这新创建一个session信息
HttpSession session = request.getSession();
//服务器做校验
String sessionId = session.getId();
writer.println("<h1>欢迎访问~</h1>");
writer.println(String.format("<h3>SessionID:%s</h3>",
sessionId));
writer.println("<hr>"); // 输出分隔线
// 打印 Session 的创建时间
writer.println("Session 创建时间:"+ LocalDateTime.ofInstant(Instant.ofEpochMilli(session.getCreationTime()), ZoneId.systemDefault()));
// 打印 Session 的最后访问时间
writer.println(String.format("<p></p>Session 最后访问时间:%s<p></p>",
LocalDateTime.ofInstant(Instant.ofEpochMilli(session.getLastAccessedTime()), ZoneId.systemDefault())));
// 会话 key 值定义
String sessionKey = "countkey";
// 判断当前会话信息session是否为新的会话信息
if(session.isNew() ||
session.getAttribute(sessionKey)==null){
// 表示第一次使用 session 对象
session.setAttribute(sessionKey,1);
writer.println("访问次数:1");
}else{
// 非第一次访问
int count =(int)session.getAttribute(sessionKey);
count++;
// 更新 session 信息
session.setAttribute(sessionKey,count);
writer.println("访问次数:"+count);
}
// 移除属性
// session.removeAttribute("countkey");
// //设置过期
// session.invalidate();
}
}
Sesion和Cookie的区别:
- Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个);
- Session把用户的数据写用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费);
- Session对象由服务器创建;
使用场景:
- 保存一个登录用户的信息;
- 购物车信息;
- 在整个网站中经常会使用的数据,我们将它保存在session中;