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配置;

  • 相关阅读:
    SQL Server Audit监控触发器状态
    SQL Server 数据变更时间戳(timestamp)在复制中的运用
    SQL Server 更改跟踪(Chang Tracking)监控表数据
    SQL Server 变更数据捕获(CDC)监控表数据
    SQL Server 事件通知(Event notifications)
    SQL Server 堆表行存储大小(Record Size)
    SQL Server DDL触发器运用
    SQL Server 默认跟踪(Default Trace)
    SQL Server 创建数据库邮件
    SQL Server 跨网段(跨机房)FTP复制
  • 原文地址:https://www.cnblogs.com/scw123/p/9968134.html
Copyright © 2011-2022 走看看