Session对象失效的客户端解决方法

2016-02-19 12:28 27 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐Session对象失效的客户端解决方法,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - Web开发 】

ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息。当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,因此在用ASP开发网络应用程序时,可以利用Session对象保存和跟踪用户的状态信息。

  Session对象有一个十分重要的属性:Timeout,它用于设置在会话资源被释放前,会话对象所能保持非活动状态的时间(默认值为20分钟)。当Timeout属性设置的时间值耗尽后,会话资源将被释放。通过Timeout属性破坏Session对象,避免了Session对象在服务器中无限制地产生,保护了服务器资源。但是,在实际网络开发中,常常遇到由于Session对象失效,用户状态信息丢失而导致应用流程无法正常完成的问题。

  虽然利用Timeout属性释放资源的策略是出于保护服务器的目的,但是Session对象不可预知的失效性,却成为开发应用程序的一个弊病。因而在实际应用程序的开发中,必须解决Session对象失效的问题。

  传统的解决方法

  现有的解决方法都是采用服务器端方法解决Session对象失效问题。典型的处理方法分为两大类:失效前的处理和失效后的处理。

  失效前的处理是指在Session对象尚未失效之前,对变量进行转存等处理,做到防患于未然。典型的解决方法是在应用程序中设定一个定时器,在Session对象失效前5分钟触发定时器,然后重新设置Session对象的各个变量和对象。由于必须在服务器端实时维护该定时器,并且必须保证该段程序在整个会话过程中处于激活状态,所以采用这种方法增加了服务器的额外负载。

  失效后的处理是指在Session对象失效后,立即提示用户进行处理。典型的解决方法是在Session对象失效后,在服务器端保存断点,并提示用户重新登录,继续完成工作。这种方法实现简单,但是往往因为断点的不可完全自动恢复性,以及重新登录过程的复杂性,而受到最终用户的抱怨和指责。

  针对以上两类解决方案的缺陷,笔者在编程实践中结合Cookie对象的特性,采用Session对象与Cookie对象在客户端联合存取会话级变量的方法,既避免了对服务器资源的额外需求,又解决了断点不可自动恢复的问题,而且还免去了重新登录的麻烦。

  新的解决方法

  Cookie对象是用来存储有关当前用户数据的小信息包,它可以在浏览器和Web服务器之间传递。在Web应用中,Cookie提供了一种用于跟踪、记录每个用户位置的机制。Cookie最常见的用处之一,就是保存一个Web应用中最后一次被访问的网络页面的时间以及日期或被访问的网址。

  通常,Cookie对象在客户端Windows系统目录下Cookies子目录中以文件形式存储。存储在Cookie对象中的信息数据能够被保存较长时间,所以,可以将会话级变量备份在Cookie对象中,在Session对象失效后,通过检索并利用Cookie对象中的信息来自动恢复断点。

  Cookie对象具有如下几个属性:

  ●Expires:设定Cookie对象到期的日期;

  ●Domain:将Cookie对象的传送确定为仅由Domain属性确定的成员;

  ●Path:确定Cookie对象传送路径;

  ●Secure:明确Cookie对象是否安全;

  ●HasKeys:返回Cookie对象是否包含多值。

  如果没有显式定义Cookie对象的Expires属性,Cookie对象将在用户会话期结束时到期。

  ASP中通过Request集合和Response集合读写对象。向Cookie对象写变量的语法如下:

  Response.Cookies(cookie)[(Key)|.attribute] = value

  其中,cookie是Cookie文件名,Key标明一个字典元素,attribute是Cookie 的一个具体性质,value是分给cookie的值。例如,为创建一个叫MyHobby的Cookie,并分配其值为:BasketBall,使用下述语法:

  %Response.Cookies(“MyHobby")=“BasketBall" %

  在客户机器上读取Cookie对象的方法如下:

  Request.Cookies(cookie)[(Key)|.attribute]

  其中,cookie是被请求Cookie的名字,Key是子关键字值下标,attribute是用于标明Cookie属性。例如:为抽取一个叫做MyHobby的Cookie中的信息并将它的值写到页面,使用下述语法:

  % Request.Cookies(“MyHobby") %

  需要注意的是:不能在HTTP页首信息已被送到请求浏览器之后,再向一个Cookie对象写入信息。换句话说,不能在任何HTML标识符被发送到浏览器之后才向浏览器发送Cookie信息。

  具体实现

  下面通过一个基于ASP技术的聊天室的实现,来介绍如何处理Session对象变量失效的问题。

  ●在用户登录前初始会话级变量:UserName(用于存储登录用户名)。

  % Session(“UserName")=“" %

  //初始化Cookie对象

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  % Response.Cookies(“UserName")=“" %

  ●在用户登录时,设置会话级变量并备份到客户端Cookie对象中。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  %userName=Trim(Request.For(“UserName"))%

  % Session(“UserName")=userName %

  //将会话级变量备份到客户端Cookie对象中

  % Response.Cookies(“UserName")=userName %

  ●在用户发言的时候,读取会话级变量,如果该变量已经失效,则通过读取Cookie对象,恢复该会话级变量的属性值。

  % userName=Session(“UserName") %

  //如果变量已经失效,则检索客户端Cookie对象

  % if userName=“" then %

  % userName=Request.Cookies(“UserName") %

  % if userName=“" then %

  //如果用户未经过登录就进入聊天室,则该Cookie对象属性值为空。此时,提示用户出错,并转向用户登录页面

  % Response.Redirect “Error.html" %

  % else %

  //从Cookie对象中恢复该会话级变量

  % Session(“UserName")=userName %

  % end if %

  % end if %

  ●当用户退出聊天室时,清除会话级对象和Cookie对象。

  % Session(“UserName")=“" %

  //将Cookie对象属性值清除,避免用户不经过登录就直接进入聊天室

  % Response.Cookies(“UserName")=“" %

  以上代码在Windows NT 4.0+IIS 4.0+IE 5.0环境中运行通过。

  小 结

  Session对象与Cookie对象在客户端联合存取会话级变量的方法简单实用,并且能够有效地避免用户强行登录等问题,不失为一种较好地解决Session对象失效的客户端方法。

来源:http://www.tulaoshi.com/n/20160219/1600973.html

延伸阅读
手机客户端软件虽只是手机中一个功能,但它却要比设计单款手机更为复杂。在设计单款、单系列手机时,需要考虑这款手机的软、硬件优势及不足,考虑其特性、其UI Style Guideline ,确定这些内容后,整个平台的UI也找到基础了。说起来,这至多是考虑某个系统、某个屏幕的特性而已,而不同功能的所有设计基础都是一致的。 但是对于客户端,咋...
标签: ASP
  这个比较长,只要将下列代码加入<body</body之间就行: <form Name="InputForm" <div align="center"<center<p<script language="JavaScript" var FirstForm; function StartSearch() { document.forms[FirstForm+document.InputForm.SearchSelect. selectedIndex].elements[0].val...
Outlook客户端设置范例 如果您使用Outlook客户端收发邮件,请参照以下流程进行设置(以Outlook2007为例): 第一步:添加新的电子邮件账户 点击工具菜单,选择帐户设置,帐户设置页面如下图所示,在帐户设置页面点击新建添加新的电子邮件帐户: 在添加新的电子邮件帐户的第一个页面选择电子邮件服务器类型:Microsoft Ex...
《天天酷跑》提示非法客户端怎么解决 《天天酷跑》提示非法客户端怎么解决方法: 有些时分我们安装了破解版后,登入界面却显现为不合法客户端,需求下载正版。 这个时分点回手机桌面,找到破解版的使用信息点击清除,再次登入即可。 安卓原生版体系整理办法 《天天酷跑》依咪兔真情宝宝属性详解 《天天酷跑》双节活...
标签: ASP
  now是获得服务器的时间吗,并不一定,只有在服务器端运行的脚本是获得服务器的时间,在客户端的则是获得客户端的 可以使用任何一个元素,比如span或者input记载服务器的时间,方法是 <span id="servertime"<%=now%</span,在记载下客户端的时间<span id="clienttime"</span在onload时间中写onload=cli...

经验教程

746

收藏

14
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部