zoukankan      html  css  js  c++  java
  • java的会话技术和session

    1、会话技术
    (1)从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。
    注:浏览器没关,只关闭一个网页不算会话结束;
    (2)分类:cookie和session
    2、cookie:客户端本地;客户端可以清除cookie;安全性不好;减轻服务器存储压力;


    (1)服务器向客户端发送一个cookie:响应头set-cookie
       1)创建cookie;Cookie cookie = new Cookie(String Name,String Value);
           键值对;set-cookie响应头;别写中文;
       2)设置持久化时间:cookie.setMaxAge(60*10)里面的单位是秒;
         不设置存储在浏览器内存中,关闭后销毁,设置后持久化到浏览器的磁盘文件;超过时间自动销毁;
    3)设置携带路径:cookie.setPath(String path);
         注:("/")任何路径都可以;("/web05")web05下的所有路径都可以;
        不设置cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息;
        举例:cookie信息在web05的sendcookie里,那么访问完sendcookie后,访问web05下的其他项目也会有此cookie信息;
    4)发送cookie:response.addCookie(Cookie cookie);

    package com.oracle.cookie;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class cookieServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            //1、创建cookie对象
            Cookie cookie = new  Cookie("goods","xsphone");
            //设置cookie持久化时间----------在硬盘上保存的时间
            cookie.setMaxAge(60);
            //为cookie设置携带路径
            //cookie.setPath("/Day20/cookieServlet");
            //cookie.setPath("/Day20");
            //2、存储数据发送到客户端
            response.addCookie(cookie);
            response.getWriter().write("hello world!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    效果如下:


    5)删除cookie:使用同名同路径的持久化时间为0的cookie进行覆盖;必须是同名同路径;

    package com.oracle.cookie;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class removecookieServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            //创建一个cookie
            Cookie cookie = new  Cookie("goods","xsphone");
            cookie.setPath("/Day20");
            cookie.setMaxAge(0);
            response.addCookie(cookie);
            response.getWriter().write("hello world!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    重新设置时间操作显示如下:

    (2)服务器接收客户端cookie:请求头cookie
    1)获取所有的cookie:Cookie[] cookies = request.getCookies();
    2)遍历Cookie数组:
    for(Cookie cookie : cookies){
    if(cookie.getName().equal(cookieName)){String cookieValue = cookie.getValue();}}

    注意先访问cookieServlet!

    package com.oracle.cookie;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class getcookieServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            //先获取装有cookie对象的数组
            Cookie[]  cookie = request.getCookies();
            for(Cookie  c:cookie){
                if(c.getName().equals("goods")){
                    System.out.println(c.getValue());
                }
            }
            response.getWriter().write("hello world!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    效果如下:

    控制台打印输出:


    3、session:服务器;安全性好;加重服务器存储压力;


    (1)获得Session对象:HttpSession session = request.getSession();
    !!!在一个浏览器中sessionid是同一个;根据sessionid判断是否存在;
    (2)设置session持久化时间:Cookie cookie = new Cookie("JSESSIONID",request.getSession().getId());cookie.setMaxAge(60*10);
    本质是设置cookie;
    (3)session也是一个域对象;三个方法;

    package com.oracle.seesion;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class session extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            HttpSession  session = request.getSession();
            String   id = session.getId();
            session.setAttribute("goods", "shouji");
            //设置JSESSIONID的持久化时间
            Cookie  cookie = new  Cookie("JSESSIONID",id);
            cookie.setPath("/Day20");
            cookie.setMaxAge(60*2);
            response.addCookie(cookie);
            response.getWriter().write(id);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    效果如下:

    不关闭浏览器的情况下,访问第二个servlet:

    package com.oracle.seesion;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class seesion extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            HttpSession  session = request.getSession();
            String   id = session.getId();
            HttpSession  session1 = request.getSession();
            String   id1 = session1.getId();
            String name = (String)session.getAttribute("goods");
            response.getWriter().write(id+".."+id1);
            response.getWriter().write(name);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    效果如下:

    !!!可以看出ID都是一样的;
    (4)session生命周期:第一次执行request.getSession()时创建;服务器(非正常)关闭时或者session过期/失效(默认30分钟)销毁;
    (5)设置session销毁时间:从不操作服务器端的资源开始计时默认30分钟;session.invalidate();web.xml配置;

  • 相关阅读:
    Date类型转换成LocalDateTime 类型
    连接mysql数据库执行写入语句
    排序的的值为非数字时的处理方法
    git所遇到的问题
    visual studio快捷键
    Win10编译chromium
    下载chromium CIPD client失败的解决办法
    Linux内核源代码情景分析
    【赵强老师】史上最详细的PostgreSQL体系架构介绍
    3.Consul 安装配置(Proxysql+mgr)
  • 原文地址:https://www.cnblogs.com/scw123/p/9968134.html
Copyright © 2011-2022 走看看