1. Cookie的作用:
在浏览器中,经常涉及到数据交换,如:你登录一个页面。我们经常会设置自动登录选项。那么它们就是通过cookie来记住我们的信息的, cookie是由HTTP服务器社长子的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。就像我们去超市买东西,没有积分卡的情况下,我们买完东西之后,超市没有我们任何的消费信息,但我们办了积分卡之后,超市就有了我们的消费信息。cookie就像是积分卡,可以保存积分,商品就是我们的信息,超市的系统就像服务器后台,HTTP协议就是交易的过程。
2. Cookie之API
向客户端(浏览器)写入cookie
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cookie cookie=new Cookie("name","Tom");//设置Maximum Age cookie.setMaxAge(1000);//设置cookie路径为当前项目路径 cookie.setPath(request.getContextPath());//添加cookie response.addCookie(cookie);}
首先介绍下其中的参数意义:
maximumage:存活时间,可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒如果是0,说明要删除。
path:可选的,如果不设置路径,那么只有设置该cookie的URI及其子路径可以访问。例如浏览器存的cookie的路径是/JavaWeb。
现在访问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo 则带该cookie
现在访问的地址是:http://localhost:8080/JavaWeb111/CookieDemo 则不带该cookie
从客户端读取cookie
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out=response.getWriter();Cookie[] cookies=request.getCookies();if(cookies!=null){for(Cookie cookie:cookies){String name=cookie.getName();String value=cookie.getValue();out.write(name+"="+value);}}}
3. Cookie与Session的区别
Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
Cookie作用于每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。
4.项目代码介绍
@PostMapping("/check")public Result check(@RequestBody Map<String,String> paramMap, HttpServletResponse response){Jedis jedis = jedisPool.getResource();//拼接key值 String telephone = RedisMessageConstant.SENDTYPE_LOGIN + ":" + paramMap.get("telephone");String codeInRedis = jedis.get(telephone);//从redis中获取的验证码为空 if(StringUtil.isEmpty(codeInRedis)){return new Result(false,"请重新发送验证码");}//表单中输入的验证码 String validateCode = paramMap.get("validateCode");//验证码输入错误 if(!validateCode.equals(codeInRedis)){return new Result(false, MessageConstant.VALIDATECODE_ERROR);}//移除验证码 不管预约成不成功都得移除 jedis.del(telephone);jedis.close();Member member = memberService.findByTelephone(paramMap.get("telephone"));if(null == member){member = new Member();member.setPhoneNumber(paramMap.get("telephone"));member.setRegTime(new Date());memberService.add(member);}Cookie cookie = new Cookie("login_member_telephone",paramMap.get("telephone"));cookie.setMaxAge(30*24*60*60);//设置最大存活时间 cookie.setPath("/");//设置路径 response.addCookie(cookie);return new Result(true,MessageConstant.LOGIN_SUCCESS);}
这是登录页面校验代码,通过cookie存储登录信息,当重复登录这个网站时,会用cookie跟踪用户行为。
暂无评论数据