zoukankan      html  css  js  c++  java
  • Session 会话技术

    Session

    1什么是session
    服务器端保存会话信息的技术.

    2.怎么用

    //如何获得session

    HttpSession session = request.getSession();
    //如何操作session
    // session.setAttribute(arg0, arg1);
    // session.getAttribute(arg0);
    // session.removeAttribute(arg0);
    // Enumeration<String> attributeNames = session.getAttributeNames();

    3.原理
    浏览器第一次访问服务器,服务器会在内存中开辟一个空间(session),并把session对应的ID发送给浏览器.
    那么下次浏览器再去访问服务器,会把sessionID 交给服务器,服务器通过sessionID 找到刚才开辟的空间.
    以上就是session的原理.

    4.利用session的购物车例子

    //1 获得 要添加 的商品(0~5)
    String name = request.getParameter("name");
    int intName = Integer.parseInt(name);
    //2 将数字翻译成中文商品名称 (使用数组)
    String[] products= new String[]{"肥皂","电动车","笔记本","小雨伞","八度空间","床单"};
    String productName = products[intName];
    //3 获得session getSession
    HttpSession session = request.getSession();
    //4 获得session中保存的购物车(Map)
    Map<String,Integer> map= (Map<String, Integer>) session.getAttribute("car");
    if(map!=null){
      //获得到了 ==> 不是第一次访问 ==> 继续向Map中添加
      Integer count = map.get(productName);
      if(count==null){
        //不存在==> 添加并设置数量为1
        count = 1;
      }else{
        //map中已经存在这个商品 ===> 把数量加1
        count++;
      }
    map.put(productName, count);
    }else{
      //没获得到 ==> 第一次访问
      map = new LinkedHashMap<String, Integer>();
      //新建Map==> 将商品添加并设置数量为1
      map.put(productName, 1);
    }
    //5 将Map操作完再放回session
    session.setAttribute("car", map);
    //6 返回到列表页面(重定向)
    response.sendRedirect(request.getContextPath()+"/car/list.jsp");

    浏览器关闭,则session就丢了

    4.session细节问题
    1> 服务器让浏览器记住sessionID的cookie 默认过期时间是 (-1)==> 关闭浏览器 cookie就丢失 ==> cookie丢失 sessionID就丢失 ==> 找不到服务器的session
    2> session中除了 4个操作 map的方法之外,还有哪些方法.
    long getCreationTime() 获得创建时间
    String getId() 获得sessionID
    long getLastAccessedTime() 获得最后一次访问时间
    int getMaxInactiveInterval() 获得session的寿命
    void setMaxInactiveInterval(int interval) 设置session的过期时间
    void invalidate() 让session立即失效
    boolean isNew()

    HttpSession session = request.getSession();

    System.out.println(session.getCreationTime()); //创建时间
    System.out.println(session.getLastAccessedTime());//最后一次访问session的时间
    System.out.println(session.getId() );//获得sessionID
    System.out.println(session.getMaxInactiveInterval());//获得最大存活时间
    //setMaxInactiveInterval(int interval)
    //invalidate 立即销毁session
    System.out.println(session.isNew());//查看当前获得的session是否是新的.只有在第一访问服务器,session是新的.
    session.invalidate();


    3> 关于设置session的最大有效时间
    默认是30分钟. ==> 在tomcat的web.xml中 <session-config> 配置的.
    如何修改session的过期时间?
    1.修改在tomcat的web.xml中 <session-config> ==> 影响服务器中的所有项目
    2.在项目的web.xml中 加入<session-config> 配置.==> 影响的是当前项目
    3.通过setMaxInactiveInterval(int interval)方法设置.==> 当前操作的session

    4>(了解内容)URL重写
    如果浏览器 禁用cookie功能不能保存任何cookie.那么session技术要是用 cookie来保存sessionID. 没有cookie怎么保存?
    使用url重写解决该问题.
    将页面中所有的连接 末尾全都加上 cookieid的参数. 这样用户点击连接访问网站,通过url把SeesionID带到了服务器.这样就解决了.
    但是 互联网行业没有这么干的.

  • 相关阅读:
    前端与算法 leetcode 344. 反转字符串
    JavaScript闭包使用姿势指南
    前端与算法 leetcode 48. 旋转图像
    前端与算法 leetcode 36. 有效的数独
    前端与算法 leetcode 1. 两数之和
    前端与算法 leetcode 283. 移动零
    前端与编译原理 用js去运行js代码 js2run
    前端与算法 leetcode 66. 加一
    前端与算法 leetcode 350. 两个数组的交集 II
    前端与算法 leetcode 26. 删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/nuoyinsomnus/p/7883790.html
Copyright © 2011-2022 走看看