当前位置:   article > 正文

Cookie 和 Session(HttpSession) 对象详解_cookie session撖寡情

cookie session撖寡情

前言 -------   每天都忙忙碌碌,感觉自己过得很充实很有意义,加油!加班终于完成!

Cookie对象

cookie饼干的意思,其实是一份小数据,是服务器发送给客户端,并保存在客户端的一份小数据,cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。

为什么使用Cookie

因为http请求是无状态的,当客户端第一次访问服务器的时候,服务器处理完之后响应给客户端。当第二次客户端访问的时候,服务器根本不会知道这个客户端以前来访问过,。为了更好的用户体验,更好的交互(自动登录),当客户端第二次访问的时候,服务器知道他来过。在公司的角度,是为了更好的手机用户的习惯,比如大数据。

Cookie用法

1、为响应添加Cookie

  1. Cookie cookie = new Cookie("aa","bb");
  2. Cookie cookie1 = new Cookie("kk","lll");
  3. response.addCookie(cookie);
  4. response.addCookie(cookie1);

2、客户端收到的头信息里面,多了一个字段  Set-Cookie  (响应端response)

3、获取Cookie

  1. //获取Cookie,返回一个Cookie数组
  2. Cookie[] cookies = request.getCookies();
  3. //判断第一次访问时候,cookies为空的情况,避免出现空指针
  4. if(cookies != null){
  5. for (Cookie c : cookies ){
  6. String name = c.getName();
  7. String value = c.getValue();
  8. System.out.println("name="+name+" value="+value);
  9. System.out.println("哈哈");
  10. }
  11. }

Cookie的常用方法

  1. //表示设置Cookie的生存日期,以秒为单位
  2. //当前默认值是负数,-1 ,表示关闭浏览器,Cookie就会失效
  3. //正值的话,以秒为单位
  4. cookie.setMaxAge(78);
  5. //给Cookie中的value赋予新值
  6. cookie.setValue("ds");
  7. //用于指定只有请求了指定的域名,才会带上Cookie
  8. cookie.setDomain("baidu,com");
  9. //只有访问在该域名下的DemoCookie的路径,才会带上Cookie
  10. cookie.setPath("/DemoCookie");

Cookie分类

  • 会话Cookie

当浏览器关闭的时候就会失效,存储在内存上

  • 持久Cookie

设置Cookie失效的时间,以秒为单位。  Cookie.getMaxAge();

 

例子1:获取上次登录的时间

分析当用户第二次登录成功的时候,显示该用户上一次的登录时间

1、第一次登录设置cookie,存取当前时System.currentTimeMillis()+""

2、设置一个工具类,功能是传递一个Cookie数组,获得想的到的Cookie

3、第二次登录时候获取之前设置的cookie,并使其显示出来

4、更新Cookie

代码实现

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. String username = request.getParameter("username");
  3. String password = request.getParameter("password");
  4. response.setContentType("text/html;charset=utf-8");
  5. if("admin".equals(username) && "123".equals(password)){
  6. Cookie[] cookies = request.getCookies();
  7. Cookie c = CookieUtil.getCookie(cookies);
  8. if( c == null){ //第一次登录
  9. //添加Cookie
  10. Cookie cookie = new Cookie("last",System.currentTimeMillis()+"");
  11. response.addCookie(cookie);
  12. response.getWriter().write("欢迎您"+username);
  13. }else { //第二次访问
  14. //添加一个工具类,获得我们想要的Cookie
  15. long l = Long.parseLong(c.getValue());
  16. //响应客户端
  17. response.getWriter().write("欢迎您"+username+" 当前登陆的时间为:"+ new Date(l));
  18. //更新Cookie
  19. c.setValue(System.currentTimeMillis()+"");
  20. response.addCookie(c);
  21. }
  22. }else{
  23. response.getWriter().write("用户名或者密码不正确!");
  24. }
  25. }

例子2:商品的浏览记录

准备工作

  1. 拷贝第一天的 htmll原型文件,到工程的Web里面。

  2. 在Web目录下新建一个jsp文件, product_list.jsp, 然后拷贝原来product_list.html的内容到jsp里面。 建好之后,jsp里面的所有ISO-8859-1 改成 UTF-8

    拷贝html标签的所有内容。 替换jsp的html标签即可

  3. 修改product_info.htm里面的手机数码超链接地址

    <li class="active">手机数码(current)</li>

  4. 修改首页(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会话管理

 

HttpSession对象(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分钟内不发生新的请求,就会关闭

常用的方法

  1. //获取sessionid
  2. String id = session.getId();
  3. //存值
  4. session.setAttribute("name","value");
  5. //获取值
  6. String value = session.getAttribute("name");
  7. //移除值
  8. session.removeAttribute("name");

例子三:简单购物车,使用Session

案例分析:

代码实现:

product_list.jsp

CartServlet

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. response.setContentType("text/html;charset=utf-8");
  3. //1、获取商品的id
  4. int id = Integer.parseInt(request.getParameter("id"));
  5. //获取商品的名字,公司中这里是查询数据库的,为了简单,建立一个数据,正好与id号对应
  6. String[] names = {"IphoneMax","小米6","华为9","华硕电脑","魅族","鞋靴箱包","阿迪达斯","耐克",};
  7. String name = names[id];
  8. HttpSession session = request.getSession();
  9. //2、Map<String, Integer>对应 商品名称 商品数量,
  10. Map<String , Integer> map = (Map<String, Integer>) session.getAttribute("cart");
  11. if(map == null){
  12. map = new LinkedHashMap<String , Integer>();
  13. session.setAttribute("cart",map);
  14. }
  15. //3、给购物车添加商品
  16. if (map.containsKey(name)){
  17. map.put(name,map.get(name)+1);
  18. }else{
  19. map.put(name,1);
  20. }
  21. //4、给客户端响应
  22. response.getWriter().write("<h3><a href='product_list.jsp'>继续添加商品</a></h3>");
  23. response.getWriter().write("<a href='cart.jsp'><h3>去购物车结算</h3></a>");
  24. }

cart.jsp (显示购物商品)

  1. <body>
  2. <%
  3. Map<String,Integer> map = (Map<String, Integer>) session.getAttribute("cart");
  4. if(map != null){ //必须写,否则清空购物车的时候会出现错误
  5. %>
  6. <h3>您购买的商品如下</h3>
  7. <%
  8. for (String key : map.keySet()){
  9. %>
  10. <h4>商品的名称:<%=key %> 商品的数量:<%=map.get(key) %></h4>
  11. <%
  12. }
  13. }else {
  14. %>
  15. <h3>您没有任何商品</h3>
  16. <%
  17. }
  18. %>
  19. <h3><a href="clear">清空购物车</a></h3>
  20. </body>

 

SessionClear(清空购物车) 移除Session中的元素

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/149348
推荐阅读
相关标签
  

闽ICP备14008679号