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

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对象

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

时间: 2024-10-22 22:13:41

Session对象失效的客户端解决方法_ASP基础的相关文章

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

session|对象|解决|客户端 问题的提出 ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息.当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,因此在用ASP开发网络应用程序时,可以利用Session对象保存和跟踪用户的状态信息. Session对象有一个十分重要的属性:Timeout,它用于设置在会话资源被释放前,会话对象所能保持非活动状态的时间(默认值为20分钟).当Timeout属性设

IIS 错误 Server Application Error 详细解决方法_ASP基础

Server Application ErrorThe server has encountered an error while loading an application during the processing of your request.Please refer to the event log for more detail information.Please contact the server administrator for assistance. 方法 1:在用户管

document.getElementById获取控件对象为空的解决方法_基础知识

1.下面是一个简单的例子,页面加载时显示一段信息 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>      <

[asp]怎么添加验证码的解决方法_ASP基础

有很多人需要,也有很多人问了,我记得在一个帖子中做了详细回复的. 现在再整理出来!1.下载文件 imgchk.rar 该压缩包为 imgchk 文件夹 ,其中有三个文件:validatecode.asp,validatebody.fix,validatehead.fix 主要即是为生成 验证码 服务的. 将解压文件夹直接释放在需要在某页添加验证码的同目录下 (比如 addnew.asp 需要添加验证码,该文件在 cnbruce 文件夹下,则将 imgchk 文件夹同时释放到 cnbruce 文件

关于Global.asa文件的深入研究与session变量失效提示的具体方法

一:Global.asa文件的释疑!从字面上讲!Global就是全局的,全球的意思!    我们都知道!浏览器中的变量存活期十分短暂!只有几十秒!也就是一个页面的下载时间.那么我们怎样从生命开始到结束都追踪session级变量哪?靠asp文件已经力不从心了!微软告诉我们:靠我们的Global.asa吧!    global.asa是一个可选的文件!他必须放在你的www根目录下,或是虚拟目录的根目录下.这样,可以确保你的一个应用程序共享一个global.asa文件.正是他可以在你的应用程序开始始终

js为空或不是对象问题的快速解决方法

 这篇文章主要介绍了js为空或不是对象问题的快速解决方法.需要的朋友可以过来参考下,希望对大家有所帮助 1.加了个参数<script language="javascript" defer="defer">   2. 'null'为空或不是对象:   <script type="text/javascript"> 里面加个defer=true属性试试看,   即:<script type="text/jav

jquery dialog open后,服务器端控件失效的快速解决方法

 本篇文章是对jquery dialog open后,服务器端控件失效的快速解决方法.进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 jquery dialog为我们提供了非常漂亮实用的对话框,比单调的alert.confirm.prompt好用很多.    在使用jquery与.net共同开发时,直接调用jquery dialog的open后,服务器端控件全部失效了,不能执行相应的后台代码.只是源于jquery默认把dialog添加到body中,而不是原来所在的服务器端的f

BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法_javascript技巧

我用过的两个版本: v0.5.2-dev,0.4.5 这里针对于提交方法进行说明一下,如下代码: <script> $(function () { $("#addUserForm").bootstrapValidator({ submitHandler: function(validator, form, submitButton) { // 版本号0.4.5支持 // 版本号v0.5.2-dev不再支持submitHandler配置 } }).on("succe

WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟踪处理.本文介绍我在我在我的框架里面使用WCF服务的时候,出现的一个常见错误的处理方法,它的提示信息是:基础连接已经关闭: 连接被意外关闭.这种情况我碰到的有两种,一种是返回DataTable的时候出现的,一种是返回实体类