版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章会话跟踪技术概述回顾Http协议的特点Servlet生命周期的4个阶段重定向与转发的区别本章内容会话跟踪技术概述会话Session技术会话跟踪Cookie技术会话跟踪URL重写技术会话跟踪表单隐藏域本章目标理解需要会话跟踪技术的原因应用Session实现简单购物车应用Cookie实现客户个性化应用跟踪表单隐藏域实现“注册向导”功能1.会话跟踪技术概述Http协议有什么特点?HTTP协议不记录用户的信息我刚刚被访问了两次,但是我不知道,是一个人访问了两次?还是两个人各访问一次?1.1为什么需要会话跟踪访问访问为什么需要会话跟踪在线购物系统中如何对用户进行区分?如何解决这些问题?购买2个商品张三李四购买3个商品一共购买了5个商品,钱应该从谁的帐户上扣?为什么需要会话跟踪如何登记?请求请求响应响应张三李四为了区分用户,需要为不同用户进行登记为什么需要会话跟踪Web程序能不能像银行卡号那样,根据卡号锁定一个用户呢?请求响应响应时,由服务器给用户分配唯一ID号,这样就能区分不同的用户了再次请求时,用户带着ID号,告诉服务器“我是谁”1.2什么是会话跟踪请求1请求2请求n......什么是会话当前浏览器与服务器间多次的请求、响应关系,被称作一个会话什么是会话跟踪借助于会话跟踪技术,能将同一会话中一系列请求和响应过程关联起来,使它们之间可以相互依赖和传递信息
会话跟踪技术如何唯一地标识客户?将ID发送给客户端1.3会话跟踪原理
第一次请求服务器创建一个会话,并把该对象的ID返回给用户响应第二次请求将ID一起发送给服务器publicclassServlet1extendsHttpServle{...publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=gbk");PrintWriterout=response.getWriter();//通过request的getSession()方法得到SessionIDStringsessionId=request.getSession().getId();//输出out.print(“产生了一次会话,sessionId为:"+sessionId);out.print("<ahref='servlet2'>访问servlet2</a>");}}在不同的浏览器运行会得到不同的SessionID1.4会话跟踪实现的几种方式Web服务器为客户端开辟的一块存储空间,存放状态信息Cookie是一小段文本信息,伴随着用户请求在Web服务器和浏览器之间传递,Cookie存放于客户端通过表单隐藏域来存储数据,以便在不同请求间传递,这些数据对于客户端不可见
URL重写技术在URL结尾添加一些附加数据以标识该会话
2.会话Session技术2.1什么是Session技术Session是一种保存上下文信息的机制,它针对每一个用户在服务器端开辟一块存储空间,存放用户的会话状态,通过SessionID区分不同的客户使用Session对象存储特定用户会话信息,当用户在应用程序Web页之间跳转时,存储在Session对象中的变量不会丢失,一直存于整个会话中2.2Session对象工作原理HttpSession对象服务器为每个会话创建一个HttpSession对象每个会话对象都有一个唯一的ID把用户的数据保存在相应的HttpSession对象内第一次请求响应服务器创建一个HttpSession对象,并将该对象的ID返回给用户同时,服务器在内存中开辟空间用于保存该对象数据根据ID号,服务器寻找内存中相应的数据在线购物应用程序中的购物车是否适合存入Session中?将ID发送给客户端第二次请求将ID一起发送给服务器2.3Session会话的超时管理在Http协议中,Web服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭即使客户已经离开或关闭了浏览器,Web服务器仍然保留与之对应的Session对象为此,Web服器采用“超时限制”的办法来处理Session对象实质是在服务器端开辟一个内存空间。为了节省资源,服务器会在某个特定的场合回收这个空间服务器,那么会在何时回收?服务器会在浏览器关闭之后立即回收吗?<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4">......<!--设置会话超时间隔为20分钟--><session-config><session-timeout>20</session-timeout></session-config>......</web-app>Web.xml会话超时配置2.4Session应用举例Session对象的创建
publicHttpSessiongetSession()调用此方法时,容器会先检查是否存在用户请求的会话,若存在则直接返回本次会话,若不存在则创建新会话publicHttpSessiongetSession(booleanflag)此方法中的flag用于指定是否有必要创建会话。为false表示:若客户之前没有创建会话则返回null
方法名功能publicbooleanisNew()判断当前会话对象是否为新创建的会话publicObjectgetAttribute(Stringname)根据指定名从会话中取出某个属性publicvoidsetAttribute(Stringname,Objectvalue)根据指定名将某个对象存放到会话中publicvoidremoveAttribute(Stringname)根据指定名从会话中移除某个属性publicStringgetId()获取会话IDpublicvoidinvalidate()使会话失效publicvoidsetMaxInactiveInterval(intinterval)设置会话超时的时间秒值HttpSession接口提供的常用方法
Session应用举例//获得session对象HttpSessionsession=request.getSession();//从session中获取car(购物车对象)List<Integer>car=(List)session.getAttribute("car");//如果购物车为空if(car==null){ //创建购物车对象
car=newArrayList(); //将购物车放入session中
session.setAttribute("car",car);} //获取100之内的随机数
inti=newRandom().nextInt(100); //将数值作为商品放入购物车中
car.add(newInteger(i)); //定位至get方法
this.doGet(request,response); }把商品放入购物车HttpSessionsession=request.getSession();//从session中获取car(购物车对象)List<Integer>car=(List)session.getAttribute("car");//循环迭代输出购物车的所有商品for(Integeritem:car){ out.print("商品:"+Value()+"<br>");}显示购物车商品3.会话跟踪Cookie技术3.1为什么需要使用Cookie需要统计同一客户端访问某网站的次数 在登录网站时,设置自动登录
这些功能如何实现?3.2什么是CookieCookie是服务器发送给客户的片段信息,存储在客户端浏览器的内存或硬盘中,之后在对服务器的请求中发回它Session与Cookie的最大区别是什么?3.3Cookie的应用举例Cookie对象编程相关知识点方法名功能Cookiecookie=newCookie(Stringname,Stringvalue)创建一个Cookie对象Cookie[]cookies=request.getCookies()获得所有的Cookiespublicvoidresponse.addCookie(Cookiecookie)添加一个Cookiespublicvoidcookie.setMaxAge(intarg0)设置Cookie对象的有效时间,单位为秒publicvoidcookie.setValue(Stringvalue)设置指定Cookie的值publicStringcookie.getvalue()获得Cookie的值Cookie的应用举例//定义全局变量privateCookietempCookie=null;
...
//设置color变量,默认为白色背景Stringcolor="white";//说明有设置背景,则重新赋予用户设置的背景if(tempCookie!=null) { color=tempCookie.getValue(); }out.print("<bodybgcolor='"+color+"'>");out.print("<formname='form1'method='post'action='cookieServlet'>");out.print("请选择你喜爱的背景颜色<br/>");out.print("<inputtype=radioname='radColor'value='red'>红色<br>");out.print("<inputtype=radioname='radColor'value='blue'>蓝色<br>");out.print("<inputtype=radioname='radColor'value='yellow'>黄色<br>");out.print("</p><p><inputtype='submit'name='Submit'value='提交'></p></form></body>");
...
动态生成个性设置界面//接受用户所选择的背景色StringbgColor=request.getParameter("radColor");//得到所有CookieCookie[]cookies=request.getCookies();//如果存在cookieif(cookies!=null){//迭代输出每一个cookiefor(Cookiecookie:cookies){//如果存在用于设置背景色的Cookieif("bgColor".equals(cookie.getName())){ //取出赋值给tempCookie tempCookie=cookie; //为tempCookie赋值为用户选中的背景色
tempCookie.setValue(bgColor); break;//跳出循环} }}//如果不存在用于设置背景色的Cookie,说明之前没有设置过背景色.if(tempCookie==null){tempCookie=newCookie("bgColor",bgColor);} //设置tempCookie的时效时间为一年tempCookie.setMaxAge(360*24*60*60);//保存cookieresponse.addCookie(tempCookie);this.doGet(request,response);
根据用户设置保存Cookie4.会话跟踪URL重写技术4.1为什么需要使用URL重写技术使用Cookie作为会话跟踪技术的优点是,Cookie在客户和服务器之间传送全部是自动进行,不需要人为介入但Cookie被证明存在安全隐患,一些谨慎用户会在浏览器中设置禁用Cookie,在禁用Cooke的情况下,无法自动使用Cookie进行会话跟踪禁用Cookie4.2URL重写技术原理HttpServletResponse接口定义两个用于自动完成URL重写的方法publicStringencodeURL(stringurl)用于对超链接和form表单的action属性的URL进行自动URL重写publicStringencodeRedirectURL(Stringurl)用于对需要传递给HttpServletResponse接口中的sendRedirect()方法的URL进行自动URL重写
两种方法都是首先判断客户请求消息中是否包含Cookie字段,如果没有,表示客户端不支持Coookie,它会将会话ID作为JSESSIONID参数值拼接到URL末尾;如果有,则不会附加JSESSIONID参数值
4.3URL重写技术应用举例public
void
doPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=gbk");PrintWriterout=response.getWriter();//向session中放入uid属性request.getSession().setAttribute("uid","jack");//超链接到servlet4out.print("<ahref='servlet4'>enter</a>");}PrintWriterout=response.getWriter();Stringuid=request.getSession().getAttribute("uid").toString();out.print("session属性中uid的值是:"+uid);开启Cookie时能够正常运行禁用Cookie后,运行出现异常修改代码重写URL,再次运行正常Stringpath=response.encodeURL("/servlet4");request.getSession().setAttribute("uid","jack");out.print("<ahref='"+path+"'>aa访问Servlet4</a>");5.会话跟踪表单隐藏域5.1为什么需要使用表单隐藏域隐藏域是用于收集或发送信息的不可见元素。当表单提交时,隐藏域会将信息用事先设置时定义的名称和值发送给服务器 考虑一种场合:网页提交后,需要提取上页中的某些信息,但在本页又不能显示这些信息。例如:用户注册向导
注册功能如何如何实现?5.2使用表单隐藏域应用举例
...
out.print("<formname='form1'method='post'action='stepServlet2'>");out.print("在线用户注册向层-基本信息填写<br><br>");out.print("用户名:<inputtype='text'name='txtUserName'><br>"); out.print("密码:<inputtype='text'name='txtUserPwd'><br>"); out.print("邮箱:<inputtype='text'name='txtEmail'><br><br/>");out.print("<p><inputtype='submit'name='Submit'value='下一步'></p></form>");...//产生第二步注册的页面out.print("<formname='form1'method='post'action='stepServlet3'>");out.print("在线用户注册向层-附加信息填写<br><br>");out.print("社会地位<selectname='cmbsocialPosition'style='width:160px'>");out.print("<optionvalue='学生'selected>学生</option>");out.print("<optionvalue='老师'>老师</option>");out.print("<optionvalue='医生'>医生</option></select><br>");out.print("住址<inputtype='text'name='txtAddresss'><br>");out.print("联系电话<inputtype='text'name='txtTel'><br/><p>");out.print("<inputtype='button'name='Submit'value='上一步'onclick='history.go(-1)'>");out.print("<inputtype='submit'name='Submit2'value='下一步'></p>");//使用隐藏域来保存上一步注册用户名out.print("<inputtype='hidden'name='txtUserName'value='"+request.getParameter("txtUserName")+"'>");//使用隐藏域来保存上一步密码out.print("<inputtype='hidden'name='txtUserPwd'value='"+request.getParameter("txtUserPwd")+"'>");//使用隐藏域来保存上一步注册用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮阴师范学院《统计计算与软件》2023-2024学年第一学期期末试卷
- 淮阴师范学院《名师成长案例研究》2022-2023学年第一学期期末试卷
- 淮阴师范学院《灾害地理学》2022-2023学年第一学期期末试卷
- 黑便课件教学课件
- 淮阴师范学院《测量与地图学》2022-2023学年第一学期期末试卷
- 淮阴工学院《制药过程安全与环保》2023-2024学年第一学期期末试卷
- 淮阴工学院《信号与系统》2021-2022学年第一学期期末试卷
- 围术期肺部超声的应用
- 生物识别系统的比较和对比考核试卷
- 仪器仪表制造业企业文化建设考核试卷
- 陕煤集团笔试题库及答案
- 33 《鱼我所欲也》对比阅读-2024-2025中考语文文言文阅读专项训练(含答案)
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- (高清版)TDT 1075-2023 光伏发电站工程项目用地控制指标
- 《中华民族共同体概论》考试复习题库(含答案)
- 2022-2023学年武汉市江岸区七年级英语上学期期中质量检测卷附答案
- 运用思维导图优化初中数学课堂的实践与探究
- 中考物理专题21 欧姆定律的动态电路计算(原卷版)
- 2022年2022年北京市各区中考英语一模试卷分类汇编完形填空专题
- (完整word版)酒店流水单
- 科技促进经济发展探讨
评论
0/150
提交评论