知识点: cookie
session: 在服务器存储当前用户的信息.与浏览器相关
cookie: 在客户端存储数据,由服务器端向客户端发送的数据
以key-value的方式存储 :key与value都是string类型
--------------------------------------------
一 cookie1 创建cookie
Cookie cook = new Cookie(key,value) ; key与value都是string类型
2 服务器响应到客户端response.addCookie(cook)
3 服务器获取cookie的信息request.getCookies()
4 页面获取cookie的值1) 使用EL表达式
${cookie.cookie名称.value} -->返回值value
${cookie.cookie名称.name} -->返回cookie中的key2) 使用 JS表达式
document.cookie; 返回一个字符串
"名=值;名=值;名=值"
3) 使用jQuery获取3.1) 在JSP页面引入jQuery.js及jQuery.cookie.js
3.2) $.cookie("名")
二 cookie中的常用方法
1) getName() :返回cookie中的key
2) getValue(),setValue() :获取或设置cookie中的value
3) setMaxAge(int) ,getMaxAge() :获取或设置cookie的有效时长
单位为秒 :60*60*24*7
注意:如果不设置,则默认为会话级
三 使用cookie实现7天内自动登录功能
1 在login的html页面部分添加一个复选框
<input type="checkbox" name="autoLogin" value="true">7天内自动登录
2 在登录的控制器中,根据复选框的值,有值且登录正确时,则把登录的信息存储到cookie中
设置cookie的有效时长
并使用response.addCookie添加cookie
3 编写过滤器 : 实现cookie登录的效果(有cookie中的数据,则转到login.do页面) ,无则转到login.jsp页面
三、实现一个完整的cookie自动登录功能
1) 登录login.jsp界面
2)对登录界面的监听器 FilterIsLogin
HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; Cookie[] cookies = request.getCookies(); if (cookies ==null || cookies.length==1){ chain.doFilter(request, response); }else { boolean a = false; for (Cookie cookie : cookies) { if (cookie.getName().equals("name")){ a =true; } } if (a){ response.sendRedirect(((HttpServletRequest) req).getContextPath()+"/CheckCookie"); }else { chain.doFilter(request, response); } }
3) 登录login.jsp的表单post提交验证和cookice验证
package com.xja.controller; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(name = "CheckCookie", value = "/CheckCookie") public class CheckCookie extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); String name = null; String password = null; if (cookies!=null){ for (Cookie cookie : cookies) { if (cookie.getName().equals("name")){ name = cookie.getValue(); } if (cookie.getName().equals("password")){ password = cookie.getValue(); } } } request.getSession().setAttribute("name",name); response.sendRedirect(request.getContextPath()+"/index.jsp"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String password = request.getParameter("password"); String choose =request.getParameter("choose") ; Cookie cookie = new Cookie("name",name); Cookie cookie1 = new Cookie("password",password); if (choose!=null){ cookie.setMaxAge(60*60*24*7); cookie1.setMaxAge(60*60*24*7); } response.addCookie(cookie); response.addCookie(cookie1); request.getSession().setAttribute("name",name); response.sendRedirect(request.getContextPath()+"/index.jsp"); } }
4) 用户实现注销退出功能
Cookie[] cookies = request.getCookies(); if (cookies!=null){ for (Cookie cookie : cookies) { if ( cookie.getName().equals("name")){ cookie.setMaxAge(0); response.addCookie(cookie); } if (cookie.getName().equals("password")){ cookie.setMaxAge(0); response.addCookie(cookie); } } } // request.getSession().invalidate(); response.sendRedirect(request.getContextPath()+"/login.jsp");