使用 Cookie 加 Session 实现登录验证

Cookie 和 Session 原理讲解

Cookie: 客户端会话技术,储存到客户端浏览器当中。
  1. 生命周期?
    - 默认情况下保存在浏览器内容中,浏览器关闭Cookie销毁
    - 持久化保存 : cookie.setMaxAge(int seconds):参数为正,代表存储多长时间单位为秒,参数为负数为默认值关闭浏览器自动销毁,参数为0删除cookie。
Session:服务器端会话技术,储存到服务器中。
  1. 在客户端浏览器关闭后,服务器不关闭,再次启动服务器获得的两个 Session 对象是否为同一个
    - 默认情况下不是同一个
    - 如果需要相同,则可以创建cookie,键为 JSESSIONID ,让 cookie 持久化保存
           Cookie c = new Cookie("JSESSIONID",session.getId());
           c.setMaxAge(60*60);
           response.addCookie(c);
    
  2. Session 常用方法
    - 获取 session 对象
    HttpSession session = request.getSession()
    - 使用 session 对象
    Object getAttribute(String name)
    void setAttribute(String name,Object value)
    void removeAttribute(String name)

实现登录验证

原理:将用户信息 user 存储到 session 中,并且把session的 id 存储到 cookie 中下一次访问时,从浏览器中的cookie中获取session ,判断 session中是否含有user,如果不含则没有登录,如果包含则已经登录。

使用 Cookie 加 Session 实现登录验证_第1张图片

代码实现

登录:将user储存到session中
HttpSession session = request.getSession();
session.setAttribute("user",user);
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);

response.setCharacterEncoding("utf-8");
JSON.writeJSONString(response.getWriter(),true);
获取 session:在 filter 中
HttpSession session = request.getSession();

User user = (User) session.getAttribute("user");
// 如果 user 不为空放行
if (user!=null){
     
    request.setAttribute("user",user);
    chain.doFilter(request,response);
}else{
     
// 为空的话,重定向到未登录页面
    response.sendRedirect(request.getContextPath()+"/notLoad.jsp");
}

你可能感兴趣的:(java,cookie,session,servlet)