赞
踩
前言 ------- 每天都忙忙碌碌,感觉自己过得很充实很有意义,加油!加班终于完成!
cookie饼干的意思,其实是一份小数据,是服务器发送给客户端,并保存在客户端的一份小数据,cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。
为什么使用Cookie
因为http请求是无状态的,当客户端第一次访问服务器的时候,服务器处理完之后响应给客户端。当第二次客户端访问的时候,服务器根本不会知道这个客户端以前来访问过,。为了更好的用户体验,更好的交互(自动登录),当客户端第二次访问的时候,服务器知道他来过。在公司的角度,是为了更好的手机用户的习惯,比如大数据。
Cookie用法
1、为响应添加Cookie
Cookie cookie = new Cookie("aa","bb"); Cookie cookie1 = new Cookie("kk","lll"); response.addCookie(cookie); response.addCookie(cookie1);2、客户端收到的头信息里面,多了一个字段 Set-Cookie (响应端response)
3、获取Cookie
//获取Cookie,返回一个Cookie数组 Cookie[] cookies = request.getCookies(); //判断第一次访问时候,cookies为空的情况,避免出现空指针 if(cookies != null){ for (Cookie c : cookies ){ String name = c.getName(); String value = c.getValue(); System.out.println("name="+name+" value="+value); System.out.println("哈哈"); } }
Cookie的常用方法
- //表示设置Cookie的生存日期,以秒为单位
- //当前默认值是负数,-1 ,表示关闭浏览器,Cookie就会失效
- //正值的话,以秒为单位
- cookie.setMaxAge(78);
-
- //给Cookie中的value赋予新值
- cookie.setValue("ds");
-
- //用于指定只有请求了指定的域名,才会带上Cookie
- cookie.setDomain("baidu,com");
-
- //只有访问在该域名下的DemoCookie的路径,才会带上Cookie
- cookie.setPath("/DemoCookie");
Cookie分类
- 会话Cookie
当浏览器关闭的时候就会失效,存储在内存上
- 持久Cookie
设置Cookie失效的时间,以秒为单位。 Cookie.getMaxAge();
例子1:获取上次登录的时间
分析:当用户第二次登录成功的时候,显示该用户上一次的登录时间,
1、第一次登录设置cookie,存取当前时System.currentTimeMillis()+""
2、设置一个工具类,功能是传递一个Cookie数组,获得想的到的Cookie
3、第二次登录时候获取之前设置的cookie,并使其显示出来
4、更新Cookie
代码实现:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); response.setContentType("text/html;charset=utf-8"); if("admin".equals(username) && "123".equals(password)){ Cookie[] cookies = request.getCookies(); Cookie c = CookieUtil.getCookie(cookies); if( c == null){ //第一次登录 //添加Cookie Cookie cookie = new Cookie("last",System.currentTimeMillis()+""); response.addCookie(cookie); response.getWriter().write("欢迎您"+username); }else { //第二次访问 //添加一个工具类,获得我们想要的Cookie long l = Long.parseLong(c.getValue()); //响应客户端 response.getWriter().write("欢迎您"+username+" 当前登陆的时间为:"+ new Date(l)); //更新Cookie c.setValue(System.currentTimeMillis()+""); response.addCookie(c); } }else{ response.getWriter().write("用户名或者密码不正确!"); } }
例子2:商品的浏览记录
准备工作:
拷贝第一天的 htmll原型文件,到工程的Web里面。
在Web目录下新建一个jsp文件, product_list.jsp, 然后拷贝原来product_list.html的内容到jsp里面。 建好之后,jsp里面的所有ISO-8859-1 改成 UTF-8
拷贝html标签的所有内容。 替换jsp的html标签即可
修改product_info.htm里面的手机数码超链接地址
<li class="active">手机数码(current)</li>
修改首页(index.html)顶部的手机数码跳转的位置为 product_list.jsp
<li class="active">手机数码(current)</li>
分析过程:
代码实现:
product_list.jsp文件
CookieOne(添加cookie,设置cookie)
CookieClear (清除cookie,清除浏览记录)
Cookie的安全问题
cookie是储存在浏览器端的,不安全,大小有限制,浏览器应该支持每台 Web 服务器有 20 个 cookie,总共有 300 个 cookie,并且可能将每个 cookie 的大小限定为 4 KB。,因此,引出Session会话管理
会话,一个浏览器打开一个工程就是一个会话,不同的浏览器打开的是不同的会话,会话,指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。
session是依赖于Cookie的一种会话机制,当建立一个session对象时候,请求中(request)就会有一个Cookie。
Cookie当不设置时间时,默认 -1 ,关闭浏览器Cookie失效,cookie是在内存上,只有设置时间,才会存储在硬盘上。
Cookie是服务器返回的一小段数据,并存储在客户端中,session是存储在服务器中的。
会话信息的范围仅限于当前 Web 应用程序 (
ServletContext
),因此存储在一个上下文中的信息在另一个上下文中不是直接可见的。
application 是相当于ServletContext,上下文 ,共享变量,所以不同的浏览器访问服务器都可以的到application设置的值。
Session对象创建
HttpSession session = request.getSession(); //创建Session对象
Session对象的销毁
因为session是将数据存储在服务器中的内存中的数据,当关闭浏览器session数据也不会消失。 (Redis)
1.关闭服务器
2.session会话过期,默认时间时30分钟。在30分钟内不发生新的请求,就会关闭
常用的方法
- //获取sessionid
- String id = session.getId();
-
- //存值
- session.setAttribute("name","value");
-
- //获取值
- String value = session.getAttribute("name");
-
- //移除值
- session.removeAttribute("name");
例子三:简单购物车,使用Session
案例分析:
代码实现:
product_list.jsp
CartServlet
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- response.setContentType("text/html;charset=utf-8");
- //1、获取商品的id
- int id = Integer.parseInt(request.getParameter("id"));
- //获取商品的名字,公司中这里是查询数据库的,为了简单,建立一个数据,正好与id号对应
- String[] names = {"IphoneMax","小米6","华为9","华硕电脑","魅族","鞋靴箱包","阿迪达斯","耐克",};
- String name = names[id];
-
- HttpSession session = request.getSession();
- //2、Map<String, Integer>对应 商品名称 商品数量,
- Map<String , Integer> map = (Map<String, Integer>) session.getAttribute("cart");
- if(map == null){
- map = new LinkedHashMap<String , Integer>();
- session.setAttribute("cart",map);
- }
-
- //3、给购物车添加商品
- if (map.containsKey(name)){
- map.put(name,map.get(name)+1);
- }else{
- map.put(name,1);
- }
-
- //4、给客户端响应
- response.getWriter().write("<h3><a href='product_list.jsp'>继续添加商品</a></h3>");
- response.getWriter().write("<a href='cart.jsp'><h3>去购物车结算</h3></a>");
- }
cart.jsp (显示购物商品)
<body> <% Map<String,Integer> map = (Map<String, Integer>) session.getAttribute("cart"); if(map != null){ //必须写,否则清空购物车的时候会出现错误 %> <h3>您购买的商品如下</h3> <% for (String key : map.keySet()){ %> <h4>商品的名称:<%=key %> 商品的数量:<%=map.get(key) %></h4> <% } }else { %> <h3>您没有任何商品</h3> <% } %> <h3><a href="clear">清空购物车</a></h3> </body>
SessionClear(清空购物车) 移除Session中的元素
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。