当前位置: 移动技术网 > IT编程>开发语言>Asp > Session对象失效的客户端解决方法

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

2017年12月12日  | 移动技术网IT编程  | 我要评论
asp(active server pages)技术的session对象用于存储用户在对话期间的私有信息。当前用户的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对象中的信息来自动恢复断点。

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网