如何解决ASP中session失效问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何解决ASP中session失效问题
摘要:asp作为一种服务器端脚本的编写环境,可以用来创建和运行动态网页或web应用程序,它所提供的一些内置对象使得服务器端脚本功能更强。session是asp的一个重要对象,可以用来在页面间传递参数。然而,session失效导致参数传递失败这一问题,在web应用程序开发中普遍存在,使万千开发者头痛。该文介绍了如何将session对象与cookie对象联合使用以解决session失效的方法。
关键词:asp;session失效;cookie;对象
中图分类号:tp311 文献标识码:a 文章编号:1009-3044(2013)07-1527-02
ession是asp中的一个重要对象,用于存储特定的用户会话所需的信息。session中文是“会话”的意思,在asp中代表了服务器与客户端之间的“会话”。 session的作用时间从用户到达某个特定的web页开始,到该用户离开web站点,或在程序中利用代码终止某个session结束。引用session则可以让一个用户访问多个页面之间的切换也会保留该用户的信息。系统为每个访问者都设立一个独立的session对象,用以存储session变量,并且各个访问者的session对象互不干扰。
在《网页制作》教学中,我设计了这样一个任务:设计一个会员登录模块,会员分为一、二、三个级别,登录后,不同级别的会员在购买商品时可享受不同的折扣。在实现模块功能时,就用到了
session对象。然而,当某个会员登录并成功购买了一个商品后,当“再购买”行为发生时,系统却不能正确给出折扣。为什么?仔细分析模块中的两个页面,即登录页面login.asp和购买页面buy.asp的关系:登录页面将会员的“级别”等信息保存在session 中,购买页面则从session中获得会员“级别”等信息,进而在价格上给予对应折扣。“再购买”不能识别会员级别,显然是因为session失效了。如何解决这个问题?
我尝试了下面几种办法。
1 修改timeout属性值
ession对象的timeout属性用来设置session会话的超时时间,以分钟表示,默认值为20分钟。当timeout属性设置的时间值耗尽后,会话资源将被释放。通过timeout属性破坏session对象,避免了session对象在服务器中无限制地产生,保护了服务器资源。但是,在实际web应用程序开发中,常常遇到如上述会员“再购买”中出现的session失效现象,导致用户状态信息丢失而致使应用流程无法正常完成的问题。因此,在登录页面中,我加入了下面的代码:
timeout=1000
然而,同一用户依然不能在“再购买”中获得该享有的折扣,也就是session失效问题并没有解决。分析得出结论:在会员购买完第一个商品后,由于“确认”购买操作,导致了session对象会话结束。除非我重新编写购买程序,否则,即便将timeout属性值设
置的再大些,还是不能解决问题。于是,我又采用了下面的方法,试图解决这个棘手的问题。
2 利用application对象
application也是asp的一个对象,也可以传递参数。于是,我将session对象换成了application,也就是用application来保存会员的“级别”等信息。同一个会员的“再购买”功能实现了,但是又带来一个更糟糕的问题:所有的会员无论是什么级别的,都享有同第一个进入系统的会员一样的折扣了。通过分析,我发现,自己犯了一个低级错误,就是忽略了application与session的不同。
1)从应用范围看:application参数的作用域是相对于整个应用程序的,也就是整个网站的,session参数作用域仅对单个用户有效或单次会话有效。
2)从生命周期看:session是在站点的页面从打开到被关闭之前一直生存的,关闭或跳转到其它网站就会使session死掉,而application是从站点发布以来一直存活的,除非重启了站点服务。显然,用application代替session是多么愚蠢的做法啊!
3 利用cookie对象
cookie对象是用来存储有关当前用户数据的小信息包,它可以在浏览器(客户端)和web服务器之间传递。在web应用中,cookie 提供了一种用于跟踪、记录每个用户位置的机制。通常,cookie对象在客户端windows系统目录下cookies子目录中以文件形式存
储。存储在cookie对象中的信息数据能够被保存较长时间,所以,可以将会话级变量备份在cookie对象中,在session对象失效后,通过检索并利用cookie对象中的信息来自动恢复断点。
这个方法终于成功地解决了session失效问题。具有代码如下:其中的membername用于存储会员名,memberjb用于存储会员级别,在用户登录前初始会话级变量的代码如下:
在会员登录时,设置会话级变量并备份到客户端cookie对象中。代码如下:
在会员购买商品时,读取会话级变量,如果该变量已经失效,则通过读取cookie对象,恢复该会话级变量的属性。代码如下:
当会员退出时,清除会话级对象和cookie对象。
4 结束语
ession对象与cookie对象在客户端联合存取会话级变量的方法简单实用,并且能够有效地避免用户强行登录等问题,不失为一种较好地解决session对象失效的方法。