第二章_session管理

2.1 网址重写

网址重写是一种Session追踪技术,需要将一个或多个token做为一个查询字符串添加到一个URL中。Token的格式一般是键=值。

Url?key-1=value-1&key-2=value-2...&key-n=value-n

 

2.2 隐藏域

利用隐藏域来保持状态,与采用网址重写技术类似。但它不是将值添加到URL后面,而是将他们放在HTML表单的隐藏域中。当用户提交表单时,隐藏域的值也传送到服务器。只有当页面包含表单,或者可以在页面中添加表单时,才适合使用隐藏域。这种技术胜过网址重写的地方在于,可以将更多的字符传到服务器,并且不需要进行字符编码。但是像网址重写一样,也只有当要传递的信息不需要跨越多个页面时,才适合使用这种技术。常见的隐藏域我们用来显示id,这样方便编辑的时候可以根据id获取到值显示出来。

 

2.3 Cookie

Cookie是自动在Web服务器和浏览器之间来回传递的一小块信息。Cookie适用于那些需要跨越许多页面的信息。由于cookie是做为HTTP标头嵌入的,因此传输他的过程由HTTP协议处理。除此之外,还可以根据自己的需要设置cookie的有效期限。对于Web浏览器而言,每台Web服务器最多可以支持20额cookie。

Cookie的不足之处在于,用户可以通过修改他的浏览器设置来拒绝接受cookie。

要使用cookie,必须熟悉javax.servlet.http.cookie类,以及HttpServletRequest和HttpServletResponse接口中的几个方法。

要创建一个cookie,传递一个名称和一个值给Cookie类的构造器:

Cookie cookie = new Cookie(name,value) ;

例如,要创建一个选择语言的cookie,可以这么写:

Cookie languageSelectionCookie = new Cookie(“language”,”Italian”) ;

创建cookie之后,可以设置他的domain、path及maxAge属性。尤其值得关注的是maxAge属性,因为它决定cookie的有效期。

httpservletResponse.addCookie(cookie);

当浏览器再次发出对同一个资源或者对同一台服务器中的不通资源的请求时,它会同时把从Web浏览器处收到的cookie再传回去。

要访问浏览器发出的cookie,可以在HttpServletRequest中使用getCookies方法。该方法将返回一个Cookie数组,如果请求中没有cookie,将返回null。为了找到某个名称的cookie,需要迭代数组。下面举个例子,看看如何读取一个名为maxRecords的cookie。

[java] view plain copy

 print?

  1. Cookie[] cookies = request.getCookies() ;  
  2.         Cookie maxRecordsCookie = null ;  
  3.         if(cookies != null){  
  4.             for(Cookie cookie:cookies){  
  5.                 if(cookie.getName().equals("maxRecords")){  
  6.                     maxRecordsCookie = cookie ;  
  7.                     break ;  
  8.                 }  
  9.             }  
  10.         }  

令人遗憾的是,没有getCookieByName方法可以使获取cookie变得更简单一些。更令人难过的是,也没有方法可以直接删除cookie。为了删除cookie,需要创建一个同名的cookie,将它的maxAge属性设置为0,并在HttpServletResponse中添加一个新的cookie。看看下面是如何删除一个名为userName的cookie的:

Cookie cookie = new Cookie(“userName”,””) ;

cookie.setMaxAge(0) ;

response.addCookie(cookie) ;

 

2.4 HttpSession对象

HttpSession是当一个用户第一次访问某个网站时自动创建的。通过在HttpServletRequest中调用getSession方法,可以获取用户的HttpSession。getSession有两个重载方法:

HttpSession getSession()

HttpSession getSession(boolean create)

无参的getSession方法返回当前的HttpSession,如果当前没有,则创建一个并返回。getSession(false)方法返回当前的HttpSession(若有),如果没有,则返回null。getSession(true)方法返回当前的HttpSession(若有),如果没有,则新建一个并返回。getSession(true)和getSession是一样的。

放在HttpSession中的值是保存在内存中的。

添加到HttpSession中的值不一定是String,可以为任意Java对象,只要它的类实现了java.io.Serializable接口即可,以便当Servlet容器认为有必要的时候,保存的对象可以序列化成一个文件或者保存到数据库中,例如,当容器的内存快要用完的时候,仍然可以将非序列化的对象保存在HttpSession中,但是如果Servlet容器试图将他们序列化,将会以失败告终,并抛出异常。

通过在HttpSession中调用getAttribute方法,同时传递一个属性名称,可以获取HttpSession中保存的对象。这个方法的签名如下:

java.lang.Object getAttribute(java.lang.String name)

HttpSession中另一个有用的方法是getAttributeNames,它返回一个Enumeration,迭代一个HttpSession中的所有属性:

java.util.Enumeration<java.lang.String> getAttributeNames()

注意,HttpSession中保存的值不发送到客户端,这与其他的Session管理方法不同。而是servlet容器为它所创建的每一个HttpSession生成一个唯一标识符,并将这个标识符做为一个token发送给浏览器,一般是做为一个名为JSESSIONID的cookie,或者做为一个jessionid参数添加到url后面。在后续的请求中,浏览器会将这个token发送回服务器,使服务器能够知道是哪个用户在发出请求。无论servlet容器选择用哪一种方式传输session标识符,那都是在后台自动完成的,不需要你去做额外的处理工作。

Java.lang.String getId()

HttpSession中还定义了一个invalidate方法。这个方法强制Session过期,并将绑定到它的所有对象都解除绑定。在默认情况下,HttpSession是在用户静默一定时间之后过期,可以在部署描述符的session-timeout元素中将session的期限设置为整个应用程序。例如,将这个值设为30,使所有session对象在用户最后一次访问之后30分钟过期。如果没有配置这个元素,这个期限将由servlet容器决定。

很多时候,还需要销毁未过期却又没用的HttpSession实例,以便释放一些内存空间。

可以调用getMaxInactiveInterval方法,以了解一个HttpSession在用户最后一次访问之后还可以维持多久。这个方法返回用户离开的秒数。setMaxInactiveInterval方法可以帮助你为个别HttpSession的Session期限设置一个不同的值。

Void setMaxInactiveInterval(int seconds)

如果向这个方法传递0,那么HttpSession将永远不会过期。一般来说,这不是一个好方法,因为HttpSession占用的堆(heap)空间将永远不会释放,直到应用程序卸载或Servlet容器关闭为止。

时间: 2024-09-13 12:45:25

第二章_session管理的相关文章

第二章、进程的描述与控制

第二章.进程的描述与控制 2.1 前趋图和程序执行 2.1.1 前趋图 概念: 所谓前趋图:指一个有向无循环图(DAG),它用于描述进程之间执行的先后顺序. 2.1.2 程序顺序执行 特征: 顺序性 封闭性:指程序在封闭的环境中运行,程序运行时独占全机资源,资源的状态只有本程序才能改变,程序一旦开始执行,其执行结果不受外界因素影响 可再现性:只要条件相同还会得到相同的执行结果. 2.1.3 程序并发执行 特征: 间断性 失去封闭性 不可在现性 2.2进程的描述 2.2.1 进程的定义和特征 定义

&amp;gt; 第二章 NGWS Runtime 技术基础(rainbow 翻译) (转自重粒子空

<<展现C#>> 第二章 NGWS Runtime 技术基础(rainbow 翻译)   出处:http://www.informit.com/matter/ser0000001/chapter1/ch02.shtml 正文: 第二章  NGWS  runtime 技术基础     既然你已经具有了C#全面的印象,我也想让你了解NGWS runtime的全貌.C#依靠由NGWS提供的运行时:因此,有必要知道运行时如何工作,以及它背后所蕴含的概念.    所以,这一章分为两部分--它

Programming MS Office 2000 Web Components第二章第二节

web 第二章第二节 电子表格组件的高级功能 我们已经讨论了电子表格组件的大部分基本功能,现在让我们转向一些高级功能.大部分的这些高级功能Excel2000都不包含,因为这些是组件专门需要的特殊功能.而那些Excel2000中存在的功能,在电子表格组件中也被增强,使得可以提供一些新的功能. 属性绑定和实时数据 "属性绑定"是电子表格组件中最新奇的新功能之一,它是指控件能够将同一个web页面上其它对象的属性和方法用作单元值或公式参数的能力.电子表格控件使用标准的COM机制来实现绑定到属性

《.net编程先锋C#》第二章 理论基础-公用语言 运行环境(转)

编程 第二章 理论基础-公用语言 运行环境既然你已经具有了C#全面的印象,我也想让你了解NGWS runtime的全貌.C#依靠由NGWS提供的运行时:因此,有必要知道运行时如何工作,以及它背后所蕴含的概念.所以,这一章分为两部分--它们是所有的概念和使用的基础.两部分的内容虽然有些重叠,但它有助于加深理解正在学习的概念. 2.1 NGWS RuntimeNGWS和NGWS Runtime为你提供了一种运行时环境.该运行时管理执行代码,并提供了使编程更容易的服务.只要你的编译器支持这种运行时,你

ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介1.1 ArcGIS for Desktop ArcGIS for Desktop是ArcGIS产品线上的桌面端软件产品,为GIS专业人士提供的信息制作和使用的工具.利用ArcGIS for Desktop,你可以实现任何从简单到复杂的GIS任务,包括制图,地理分析,数据编辑,数据管理,可视化和空间处理等.它可以作为三个独立的软件产品购买,每个产

《张成功项目管理记(第2版)》一第二章 项目管理之初体验

第二章 项目管理之初体验 张成功项目管理记(第2版) 首次与IT项目管理知识体系亲密接触 下午一上班,张成功就迫不及待地敲开了资深项目经理李全才办公室的门.还没等张成功开口,李全才就笑着说:"我听公司领导说,你被委任为国内某省全省大集中电子政务行政办公系统建设项目的项目经理,恭喜你啊.我知道,你今天来找我,一定是想咨询如何管理这个项目,对吧?" 张成功点了点头,李全才示意张成功坐在他办公桌前的座椅上. 令张成功万万没有想到的是,只见李全才从抽屉里拿出一本装订略显粗糙的书(张成功定睛一看

magento开发 -- 深入理解Magento第二章

  第二章 - Magento请求分发与控制器 Model-View-Controller (MVC) ,模型-视图-控制器,源于Smalltalk编程语言和Xerox Parc.现在有很多系统是基于MVC架构的,不同的系统MVC的实现也略有不同,但都体现了MVC的精髓,分离数据,业务逻辑和显示逻辑.最常见的PHP MVC框架是这样的 URL请求被一个PHP文件拦截,通常称为前端控制器(Front Controller) 这个PHP文件分析这个URL,获得一个执行控制器(Action Contr

《秩序之美——网页中的网格设计》——第二章 网格的基本概念

第二章 网格的基本概念 在为各式多媒体工作的经验丰富的平面设计师中,众所周知的是:使用网格进行设计具有多种优势.其中主要的优势有必要在这里重述一下. 网格为信息的展示增添秩序.连续性和和谐性. 网格可向读者预示出信息的所在,更有助于信息的交流. 在保持与原先展示内容总体一致的前提下,网格可使添加新内容变得更容易. 网格促使各个设计方式彼此协作而不是相互削弱. 这些只是你将读到的支持网格设计观点的一部分内容,但是到目前为止,它们已被主要写入网格如何有利于传统平面设计的读物中.而让我感到困惑的事实是

【PMP】Head First PMP 学习笔记 第十二章 采购管理

第十二章 采购管理 某些工作就是太大,以至于你的公司无法自行完成. 找到合适的卖方,选择正确类型的关系并确保合同的目标被打成. 有时候,你需要雇用外部公司做一部分的项目工作.这叫做采购(procurement),该外部公司被称为卖方. 项目采购管理包括合同管理和变更控制过程 规划采购管理 实施采购 控制采购 结束采购 项目采购管理围绕包括合同在内的协议来进行.协议是买卖双方之间的法律文件. 合同也可称作协议.谅解.分包合同或订购单. 在合同生命周期中,卖方首先是投标人.然后是中标人,之后是签约供