• 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带到了服务器.这样就解决了.
    但是 互联网行业没有这么干的.

  • 相关阅读:
    Ztree
    WebAPI
    数据传输
    jqyery+ajax 提交表单
    初试 MVC+Boostrap
    CSV 导入SQL Server 中
    10-C语言循环结构(一)
    Linux测试语句(test)
    C 链表
    C递归
  • 原文地址:https://www.cnblogs.com/nuoyinsomnus/p/7883790.html
Copyright © 2020-2023  润新知