保存会话的技术
cookie:服务器给客户端的一个信件
- 客户端技术(响应,请求)
session:服务器登记,匹配信件
- 服务器技术,保存用户会话信息
Cookie
从请求中拿到cookie信息
服务器响应给客户端cookie
方法:
Cookie[] cookies = req.getCookies();//获取cookie
cookie.getName();//获取cookie中的key
cookie.getValue();//获取cookie中的value
new Cookie("lastLoginTime",System.currentTimeMillis()+"");//cookie对象
cookie.setMaxAge(24*60*60);//设置cookie有效期
resp.addCookie(cookie);//响应一个cookie给给客户端
cookies—>appdata
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie 最多20
- cookie限制4kb
- 上限 300个cookie
删除cookie
- 不设置有效期,浏览器关闭自动消失
- 设置有效期为0
编码解码
URLEncoder.encode //编码
URLDecoder.decode //解码
Session
session与cookie的区别
- cookie把用户数据写给用户的浏览器,浏览器保存(多个)
- session把用户数据写到其独占的session中,服务器保存(重要信息,减少服务器资源浪费)
- session对象由服务器创建
使用场景:
- 保存用户登录信息
- 购物信息
- 经常使用的数据,保存在session中
使用session
package com.yl.servlet;
import com.yl.servlet.animals.Animals;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.*;
import java.io.IOException;
public class SessionDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//获取session
HttpSession session = req.getSession();
Animals animal = (Animals) session.getAttribute("name");
System.out.println(animal.toString());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate(); //注销 一旦注销就会申请一个新的id
会话自动过期
<!--设置session默认失效时间-->
<session-config>
<!--10min后自动失效-->
<session-timeout>1</session-timeout>
</session-config>