14.Session技术

1.引入

Cookie的局限:

    1)Cookie只能存字符串类型。不能保存对象

    2)只能存非中文。

      3)1个Cookie的容量不超过4KB。

如果要保存非字符串,超过4kb内容,只能使用session技术!!!

Session特点: 会话数据保存在服务器端。(内存中)

2.Session技术核心

HttpSession类:用于保存会话数据

1)创建或得到session对象

                HttpSession getSession() 

                HttpSession getSession(boolean create) 

 2)设置session对象

               void setMaxInactiveInterval(int interval)  设置session的有效时间

               void invalidate()      销毁session对象

               ava.lang.String getId()  得到session编号

3)保存会话数据到session对象

           void setAttribute(java.lang.String name, java.lang.Object value)  保存数据

          java.lang.Object getAttribute(java.lang.String name)  获取数据

          void removeAttribute(java.lang.String name) 清除数据

3.Session原理

代码解读:HttpSession session = request.getSession();

         1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID

                                               new HttpSession();

          2)把JSESSIONID作为Cookie的值发送给浏览器保存

                                               Cookie cookie = new Cookie("JSESSIONID", sessionID);

                                               response.addCookie(cookie);

          3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器

          4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。

                                               if(找到){

                                                        return map.get(sessionID);

                                               }

                                               Map<String,HttpSession>]

                                                <"s001", s1>

                                               <"s001,"s2>

          5)如果找到对应编号的session对象,直接返回该对象

          6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

  结论:通过JSESSION的cookie值在服务器找session对象!!!!!

4.Sesson细节

1)java.lang.String getId()  : 得到session编号

2)两个getSession方法:

        getSession(true) / getSession()  : 创建或得到session对象。没有匹配的session编号,自动创 建新的session对象。

         getSession(false):     得到session对象。没有匹配的session编号,返回null

3)void setMaxInactiveInterval(int interval)  : 设置session的有效时间,以秒为单位,最后一次访问session的时间开始计算

                       session对象销毁时间:

                                 3.1 默认情况30分服务器自动回收

                                 3.2 修改session回收时间

                                3.3 全局修改session有效时间,在web.xml里面web-app下面,servlet设置外,以分钟为单位

<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<!-- 修改session全局有效时间:分钟 -->
   <session-config>
		<session-timeout>1</session-timeout>
	</session-config>

                                      3.4.手动销毁session对象    void invalidate()    : 销毁session对象

4)如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题,手动设置cookie的有效时间

/**
		 * 手动发送一个硬盘保存的cookie给浏览器
		 */
		Cookie c = new Cookie("JSESSIONID",session.getId());
		c.setMaxAge(60*60);
		response.addCookie(c);

SessionDemo1是创建和操作session的,SessionDemo2是访问验证session的

public class SessionDemo1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.创建session对象
		HttpSession session = request.getSession();
		
		/**
		 * 得到session编号
		 */
		System.out.println("id="+session.getId());
		
		/**
		 * 修改session的有效时间
		 */
		//session.setMaxInactiveInterval(20);
		
		/**
		 * 手动发送一个硬盘保存的cookie给浏览器
		 */
		Cookie c = new Cookie("JSESSIONID",session.getId());
		c.setMaxAge(60*60);
		response.addCookie(c);
		
		
		//2.保存会话数据
		session.setAttribute("name", "rose");
	}

}
public class SessionDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.得到session对象
		HttpSession session = request.getSession(false);
		
		if(session==null){
			System.out.println("没有找到对应的sessino对象");
			return;
		}
		
		/**
		 * 得到session编号
		 */
		System.out.println("id="+session.getId());
		
		//2.取出数据
		String name = (String)session.getAttribute("name");
		System.out.println("name="+name);
	}

}
public class DeleteSession extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		HttpSession session = request.getSession(false);
		if(session!=null){
			session.invalidate();//手动销毁
		}
		System.out.println("销毁成功");
		
	}

}

 

If Not IsObject(application) Then Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine End If If Not IsObject(connection) Then Set connection = application.Children(0) End If If Not IsObject(session) Then Set session = connection.Children(0) End If If IsObject(WScript) Then WScript.ConnectObject session, "on" WScript.ConnectObject application, "on" End If session.findById("wnd[0]").maximize session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\02/ssubSUBSCREEN_BODY:SAPMV45A:4431/subSUBSCREEN_TC:SAPMV45A:4909/tblSAPMV45ATCTRL_U_ERF_WERTKONTRAKT").getAbsoluteRow(0).selected = true'选中一个item session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\02/ssubSUBSCREEN_BODY:SAPMV45A:4431/subSUBSCREEN_TC:SAPMV45A:4909/tblSAPMV45ATCTRL_U_ERF_WERTKONTRAKT/txtVBAP-POSNR[0,0]").setFocus session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\02/ssubSUBSCREEN_BODY:SAPMV45A:4431/subSUBSCREEN_TC:SAPMV45A:4909/tblSAPMV45ATCTRL_U_ERF_WERTKONTRAKT/txtVBAP-POSNR[0,0]").caretPosition = 5 session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\02/ssubSUBSCREEN_BODY:SAPMV45A:4431/subSUBSCREEN_TC:SAPMV45A:4909/subSUBSCREEN_BUTTONS:SAPMV45A:4052/btnBT_PKSE").press session.findById("wnd[0]/tbar[1]/btn[43]").press'进入Pricing agreement 编辑界面 session.findById("wnd[1]/usr/ctxtRV13A-KSCHL").text = "ZS61" '输入ZS61 condition type session.findById("wnd[1]/usr/ctxtRV13A-KSCHL").caretPosition = 4 session.findById("wnd[1]/tbar[0]/btn[0]").press session.findById("wnd[2]/usr/sub:SAPLV14A:0100/radRV130-SELKZ[4,0]").select’选择Key combination session.findById("wnd[2]/usr/sub:SAPLV14A:0100/radRV130-SELKZ[4,0]").setFocus’选择SD Document/Item/Product Hierachy level 1 session.findById("wnd[2]").sendVKey 2 session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtKOMG-PRODH1[0,0]").text = "SP"'放入SP备件 session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/txtKONP-KBETR[2,0]").text = "100"'放入100%折扣 session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATAB[8,0]").text = "01.01.2023"'放入开始生效时间 session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[9,0]").text = "04.03.2024"'放入结束生效时间 session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[9,0]").setFocus session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_FAST_ENTRY/ctxtRV13A-DATBI[9,0]").caretPosition = 10 session.findById("wnd[0]/tbar[0]/btn[11]").press
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值