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

    从打开一个浏览器到访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端状态与数据的

    会话技术分为Cookie和Session

      Cookie:数据存储在客户端本地,减少服务器端的储存压力,安全性不好,客户端可以清除Cookie

      Session:将数据储存在服务器端,安全性相对较好,但增加服务器压力

    Cookie

    将数据储存到客户端

    1.服务器端向客户端发送一个Cookie

      创建Cookie:Cookie cookie=new Cookie(String cookieName,String cookieValue);

        例如:Cookie cookie=new Cookie("username","zhangsan");//cookie会以响应头的形式发送给客户端,Cookie不能存储中文

      设置Cookie在客户端的持久化时间:cookie.setMaxAge(int seconds);--时间秒

        注意:如果不设置持久化时间,cookie会储存在浏览器内存中,关闭浏览器cookie信息销毁,如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里

        例如:cookie.setMaxAge(10*60);//设置cookie在浏览器中存储时间10分钟,过期自动删除

      设置Cookie携带路径:cookie.setPath(String path);

        注意:如果不设置路径,访问产生该cookie的web资源所在路径,并且web路径下都携带cookie信息

        例如:cookie.setPath("/WEB01");//代表访问WEB01应用中任何资源都携带cookie

      向客户端发送cookie:response.addCookie(Cookie cookie);

      删除客户端cookie:使用同名同路径持久化时间为0的cookie覆盖即可

    2.服务器端接收客户端发送的cookie

      通过request获得所有Cookie:Cookie[] cookie=request.getCookies();

      遍历Cookie数组,通过Cookie名称获得:

    for(Cookie cookie:cookies){
        if(cookie.getName().equal(cookieName)){
            String cookieValue=cookie.getValue();
        }
    }

    Session

    将数据储存在服务器端,为每个客户端创建一块内存空间储存数据,但客户端需要每次都携带一个标识ID去服务器找内存空间。所以说Session的实现基于Cookie,Session需要借助于Cookie储存客户的唯一性标识JSESSIONID

    1.获得Session对象:HttpSession session=request.getSession();

      获取专属于当前会话的Session对象,如果服务器端没有给会话的Session对象,会创建一个新的Session返回,如果已经有了属于该会话的Session,直接将已有的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在Session了)

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //创建属于该客户端(会话)的私有的session区域
    //    request.getSession()方法内部会判断 该客户端是否在服务器端已经存在session
    //    如果该客户端在此服务器不存在session 那么就会创建一个新的session对象
    //    如果该客户端在此服务器已经存在session 那么就获得已经存在的该session返回
            HttpSession session=request.getSession();
            String id=session.getId();//该session对象的编号id
            response.getWriter().write("JSESSIONID:"+id);
    }

    2.Session域中存取数据的三种方法

      session.setAttribute(String name,Object obj)

      session.setAttribute(String name)

      session.removeAttribute(String name)

    3.Session对象生命周期

      创建:第一次执行request.getSession()时创建

      销毁:服务器(非正常)关闭时

        session失效(默认30分钟)

        手动销毁session:session.invalidate();

      作用范围:默认在一次会话中,也就是说在一次会话中任何资源公用一个session对象

  • 相关阅读:
    【odoo14】【好书学习】第一章、安装odoo的开发环境
    echarts 根据geojson 数据绘制区域图(精确到镇)
    百度地图 获取具体位置经纬度
    js 实时监听滚动条状态 判断滚动条位置
    vue cli3 使用elemet-plus
    关于vue告警 More than 1 blank line not allowed
    vue cli3 创建项目
    intelliJ idea 自动修复eslint语法问题
    函数式编程
    二分法
  • 原文地址:https://www.cnblogs.com/wode007/p/13515760.html
Copyright © 2011-2022 走看看