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

guqichao007

guqichao007

2016-02-19 12:28

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐Session对象失效的客户端解决方法,希望大家看完后也有个好心情,快快行动吧!
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对象中的信息来自动恢复断点。

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

  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://m.tulaoshi.com/webkaifa/)

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

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

  %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对象失效的客户端方法。

展开更多 50%)
分享

猜你喜欢

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

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

AJAX客户端说明XMLHttpRequest对象

Web开发
AJAX客户端说明XMLHttpRequest对象

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

win客户端和linux客户端的区别

服务器
win客户端和linux客户端的区别

12306手机客户端打不开解决方法

手机软件 应用软件
12306手机客户端打不开解决方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Zune 客户端

平面设计 标志设计 UI设计 VI设计
Zune 客户端

在客户端重新创建对象

编程语言 网络编程
在客户端重新创建对象

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Access下如何使用通用对话框

Access下如何使用通用对话框

任凭阳光灼伤了眼 - QQ伤感分组

任凭阳光灼伤了眼 - QQ伤感分组
下拉加载更多内容 ↓