Cookie的笔记:
- cookie:
1.1:cookie的定义:
Cookie:其实是一份数据,是服务器给客户端,并且存储在客户端上的一份小数据 |
1.2:应用场景:
应用场景: 自动登录、浏览记录,购物车 |
1.3:为什么使用Cookie
1、http的请求是无状态的。客户端与服务器在通讯的时候是无状态的。其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端有没有来访过。为了更好地用户体验,更好地交互。 |
1.4:cookie有什么作用?
1.4.1:添加cookie到客户端:
response.setContentType("text/html;charset=UTF-8"); //发送给cookie到客户端 Cookie cookie=new Cookie("a","bb"); //给响应数据添加一个cookie response.addCookie(cookie); response.getWriter().write("请求成功了"); |
1.4.2:获取客户端带过来的Cookie
//获取客户端带回来的cookie Cookie[] cookies = request.getCookies(); //不能直接遍历。,因为第一次是没有带回来Cookie,就会返回null,所以需要进行判断 if(cookies!=null){ for (Cookie c : cookies) { String cookieName=c.getName(); String cookieValue=c.getValue(); System.out.println(cookieName+"="+cookieValue); } }
|
1.5:cookie的API
常用的方法: //关闭浏览器,cookie就没有了---针对cookie设置有效的期限 //参数:以秒为单位的,设置生存时间:7天:60*60*24*7 //正值:表示这个数字数字过后,cookie将会失效 //负值:关闭浏览器,那么cookie就会失效,默认值是-1 cookie.setMaxAge(60*60*24*7); |
//赋值新的值 //cookie.setValue("lisi"); |
//只有访问该域名下的cookieDemo的这个路径地址才会带cookie cookie.setPath("/CookieDemo"); |
例子: // 先获取Cookie的值,首先判断有没有cookie,如果是第一次,客户端没有带回来cookie Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie c : cookies) { System.out.println(c.getName() + "=" + c.getValue()); } }
// 1、添加Cookie,可以给客户端返回多个cookie Cookie cookie = new Cookie("name", "zhangsan"); // 2、这个cookie的有限期,默认情况下: // 关闭浏览器,cookie就没有了---针对cookie设置有效的期限 // 参数:以秒为单位的,设置生存时间:7天:60*60*24*7 // 正值:表示这个数字数字过后,cookie将会失效 // 负值:关闭浏览器,那么cookie就会失效,默认值是-1 cookie.setMaxAge(60 * 60 * 24 * 7);
// 赋值新的值 // cookie.setValue("lisi"); // 只有访问该域名下的cookieDemo的这个路径地址才会带cookie cookie.setPath("/CookieDemo");
// 在响应,添加cookie response.addCookie(cookie); // 添加Cookie Cookie cookie1 = new Cookie("password", "123"); // 在响应,添加cookie response.addCookie(cookie1); response.getWriter().write("hello cookie"); |
1.6:案例:回显上次访问的时间
显示最近访问的时间 |
|
CookieUtil.java: public static Cookie findCookie(Cookie[] cookies,String name){ //从cookie数组中找到我们想要的cookie对象 if(cookies!=null){ for (Cookie cookie : cookies) { if(name.equals(cookie.getName())){ return cookie; } } } return null; } |
EchoLoginTime.java: request.setCharacterEncoding("UTF-8"); String username=request.getParameter("username"); String password=request.getParameter("password"); response.setContentType("text/html;charset=UTF-8"); if("张三".equals(username)&&"123".equals(password)){ //获取cookie Cookie[] cookies=request.getCookies();
//从数组中找到我们想要的cookie对象 Cookie cookie = CookieUtil.findCookie(cookies,"last"); //是第一次登录。没有cookie if(cookie==null){ //给客户端添加一个cookie Cookie c=new Cookie("last",System.currentTimeMillis()+""); c.setMaxAge(60*60);//一个小时 response.addCookie(c); response.getWriter().write("欢迎您:"+username);
}else{ //第二次登录,有cookie long l =Long.parseLong(cookie.getValue()); response.getWriter().write("欢迎您:"+username+"上次来访时间是:"+new Date(l)); //3、重置上面的值 cookie.setValue(System.currentTimeMillis()+""); response.addCookie(cookie); }
}else{ response.getWriter().write("登录失败"); }
|
1.7:案例:商品浏览记录
1、把资料复制到webcontent下 |
2、新建一个jsp文件,product_list.jsp,然后复制product_list.htm内容到jsp中 |
3、修改product_info.html里面的手机数码的超链接 <a href="product_list.jsp">手机数码<span class="sr-only">(current)</span></a> |
4、修改首页(index.html)顶部的手机数码位置为product_list.jsp |
Servlet.java: //用户准备浏览的商品的id String id=request.getParameter("id"); //创建Cookie Cookie[] cookies=request.getCookies(); Cookie cookie = CookieUtil.findCookie(cookies, "history"); //代表第一次浏览 if(cookie==null){ //1、响应加入cookie Cookie c=new Cookie("history",id); //设置生存时间 c.setMaxAge(60*60); //设置访问这个工程的时候,才把cookie带回来 c.setPath("/sessionandcookie"); response.addCookie(c); //跳转 response.sendRedirect("product_info.htm"); } //第二次浏览 else{ //获取以前的cookie,得到的浏览浏览记录,ids String ids= cookie.getValue(); //让现在浏览的商品,和以前旧的商品,形成一个新的cookie的值 cookie.setValue(id+"#"+ids); //设置生存时间 cookie .setMaxAge(60*60); //设置访问这个工程的时候,才把cookie带回来 cookie .setPath("/sessionandcookie"); response.addCookie(cookie); response.sendRedirect("product_info.htm"); }
|
Jsp: <% Cookie[] cookie = request.getCookies(); Cookie cook = CookieUtil.findCookie(cookie, "history"); if(cook == null){ %> <h2>您还没浏览任何商品</h2>
<% }else{ String [] id = cook.getValue().split("#"); for(String i : id){ %> <li style="width: 150px;height: 216;float: left;margin: 0 8px 0 0;padding: 0 18px 15px;text-align: center;"> <img src="products/1/cs1000<%=i %>.jpg" width="130px" height="130px" /> </li> <% } }
%>
|
如何清除cookie: 其实就是清除cookie,删除cookie,是没有什么delete方法的,只有设置setMaxAge(0)就可以删除了 |
//清除cookie Cookie c=new Cookie("history",""); //立即删除cookie c.setMaxAge(0); //设置访问这个项目,把cookie带回来 c.setPath("/sessionandcookie"); //添加到响应中 response.addCookie(c); //跳转 response.sendRedirect("product_list.jsp"); |
1.8:cookie的总结:
1、服务器给客户端发送过来的一份小数据,并且存储在客户端上。 |
2、获取cookie,添加cookie Request.getCookie(); Request.addCookie(); |
3、cookie的分类: 会话Cookie: 默认情况下,关闭了浏览器,那么cookie就会消失 持久cookie 在一定时间内,都有效,并且会保存在客户端上。 c.setMaxAge(0);//设置立即删除 c.setMaxAge(100);//100秒后,cookie失效 |
4、Cookie的安全问题: 由于cookie会保存在客户端上,所以有安全隐藏问题,还有一个问题,cookie的大小与个数有限,为了解决这个问题,我们使用下面学到的session |
Session笔记:
- Session
会话,session是基于cookie的一种会话机制,cookie是服务器返回一小份数据给客户端,并且存放在客户端上,session是,数据存放在服务端。 |
- session的常用API
//创建session对象 HttpSession session = request.getSession(); //得到会话id String id = session.getId(); //存值 //session.setAttribute("", value); //取值 //session.getAttribute(name); //移除元素 //session.removeAttribute(name); |
- 案例:简单的案例
Session何时创建,何时销毁? 创建: r如果在servlet里面调用了这一行代码:HttpSession session=request.getSession(); |
销毁: Session:是存放在服务器的内存中的一份数据,当然可以持久化。 即使关闭浏览器也不会被销毁,
|
4、案例:简单购物车
购物车分析: |
案例代码:详见sessionandcookie |
|