zoukankan      html  css  js  c++  java
  • 0313 session

    session技术是将数据存放在服务器的技术,就是每个客户端请求的时候,服务器就会根据客户端的用户自动开辟一块区域,并自动生成一个JSESSIONID,自动将这个id返回给客户端,然后客户端可以携带id去服务器访问属于自己的区域

    原理

     所以说session技术是基于cookIe的技术,所有类似cookie技术的功能都是自动的,所以不需要研究,我们只需要研究

    (1)怎样获得属于本客户端的session对象(内存区域) 获取session对象

    HttpSession session = request.getSession(); 通过这个方法

    这个方法可以获取一个session对象,如果服务器端没有session对象,服务器就会创建一个session返回,如果有就直接将已经有的session返回

    获取JSESSIONID方法 getId()

    public class SessionServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//获取session对象
    		HttpSession session=request.getSession();
    		//获取JSEEIONID
    		String JESSIONID=session.getId();
    		response.getWriter().write(JESSIONID);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }

    当我们关闭浏览器再重新打开访问

     两次访问的id值是不一样 的。是因为关闭浏览器重新打开,这是第二个客户端访问,是感觉已经销毁了,其实不是,是客户端的JSESSIONID销毁了,但是在服务器的session域还是存在的

    那要想我关闭浏览器,我再打开访问还是这个id值,那就要用到cookie技术去设置这个JSESSIONID在客户端存储的时间

    代码展示

    public class SessionServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//获取session对象
    		HttpSession session=request.getSession();
    		//获取JSEEIONID
    		String JESSIONID=session.getId();
    		//创建cookie对象
    		Cookie cookie=new Cookie("JSESSIONID", JESSIONID);
    		//设置持久化存储时间
    		cookie.setMaxAge(6*60);
    		//设置携带路径
    		cookie.setPath("/WEB06");
    		//发送cookie
    		response.addCookie(cookie);
    		response.getWriter().write(JESSIONID);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    

      

     

     关闭浏览器再访问

     (2)怎样向session中存取数据(session也是一个域对象)

    在servlet01中存数据,在servlet02中取

    代码展示

    public class Servlet01 extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//获取域
    		HttpSession session=request.getSession();
    		//存值
    		session.setAttribute("uname", "张三");
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    

      

    public class Servlet02 extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//获取域
    		HttpSession session=request.getSession();
    		//取值
    		String name=(String)session.getAttribute("uname");
    		//解决响应乱码
    		response.setContentType("text/html;charset=utf-8");
    		response.getWriter().write(name);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    

      先访问servelet01 再访问servlet02

     此时servlet01是没有东西的

     如果我们没访问servlet01,直接访问servlet02,就会发现空指针异常,因为域中没有数据

    (3)Session对象的生命周期

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

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

    从不操作服务器端的资源开始计时 三十分钟自动销毁

    可以设置时间长一点 那就在xml文件中设置一个标签

    例:

    <session-config>

            <session-timeout>30</session-timeout>

    </session-config>

    还可以手动销毁:session.invalidate();

  • 相关阅读:
    (转载)高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENOB、分辨率、RMS、SFDR、THD、SINAD、dBFS、TWO-TONE IMD
    ADC相关参数之---分辨率和精度
    ADC相关参数之---INL和DNL
    MySQL中tinytext、text、mediumtext和longtext详解
    mysql升级5.5
    [mysql] mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
    [mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
    MySql:charset和collation的设置
    shell 下执行mysql 命令
    MySql表结构修改详解
  • 原文地址:https://www.cnblogs.com/-gongxue/p/14527947.html
Copyright © 2011-2022 走看看