陈莉莉
[摘要]基于ASP.net平台介绍session的相关知识。首先介绍Session的基本概念、作用及工作过程,然后总结几种常见的造成Session值丢失的原因,并给出相应的解决思路。
[关键词]Session丢失解决方法
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1120066-01
Session对象的主要用途是保存信息。当一个用户第一次登录网站时,系统会为其分配一个Session,只有当该客户退出时,或者Session生命周期结束时,信息才会被清除。利用Session还可以创建虚拟购物车,当客户在网络商店中选择一种商品时,该商品就会进入到购物车里面,客户的购物信息就会保存在Session中。
一、Session是什么
Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。具体到web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此,从上述的定义中我们就可以看到,Session实际上是一个特定的时间概念。一个Session
的概念需要包括特定的客户端、特定的服务器端,以及不中断的操作时间。A用户和C服务器建立连接时所处的Session,同B用户和C服务器中建立连接时所处的Session是两个不同的Session。
二、Session的作用
Session在WEB技术中占有非常重要的作用。由于网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。因此我们必须通过Session记录用户的有关信息,以供用户再次以此身份对web服务器提供要求时作确认。Session的典型应用是存放用户的Login信息,如用户名,密码,权限角色等信息,应用程序(如Email服务、网上银行等系统)根据这些信息进行身份验证和权限验证。
三、Session的工作过程
当用户第一次访问这个网站时,服务器自动会给这个用户分配一个SessionID号,浏览器只要支持Session,就会根据Session的协议,每次访问网站时都发送这个SessionID给服务器,服务器就知道原来这次http请求还是上次那个用户发的,因为http协议是没有状态的协议,而有了SessionID补充,就识别了用户。当用户在WEB应用程序中间跳转时,存储在Session对象中的变量不会清除,而会始终存在。Session变量相当于运行在客户端多个页面间的全局变量,当用户请求来自应用程序的WEB页时,如果该用户还没有会话,则WEB服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将终止该会话,如果WEB服务器停止工作,Session也将被释放。
四、Session值丢失的可能原因及解决方法
1.有些杀病毒软件会去扫描Web.Config文件,那时Session肯定会丢失。解决方法是:使杀病毒软件屏蔽扫描Web.Config文件。
2.程序内部里有让Session丢失的代码。解决方法是:检查是否有Session.Abandon()之类的代码。
3.程序有框架页面和跨域情况。解决方法是:在Window服务中将ASP.
NET State Service 启动。
4.在默认情况下,Session是保存在进程内的,IIS5是aspnet_wp.exe,
而IIS6是W3wp.exe,该进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。引起进程重起可能有以下几种情况:(1)配置文件中processModel标签的memoryLimit属性。(2)Global.asax或者Web.config文件被更改。(3)Bin文件夹中的Web程序(DLL)被修改。(4)杀毒软件扫描了一些.config文件。
5.文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失。
6.大部分的Session丢失是客户端引起的,所以要从客户端入手,看看cookie有没有打开,或者IE中的cookie数量限制也可能导致Session的丢失。
五、解决Session丢失的其他方法
1.做Session读写日志,每次读写Session都要记录下来,并且要记录SessionID、Session值、所在页面、当前函数、函数中的第几次Session操作,通过这样的途径查找丢失的原因会方便很多。
2.如果允许的话,建议使用state server或sql server保存Session,
这样不容易丢失。
3.在global.asax中加入代码,记录Session的创建时间和结束时间,超时造成的Session丢失是可以在SessionEnd中记录下来的。
5.在用ASP.net开发程序的时候遇到Session丢失时,可以完成以下三步,便可保存状态。step1:在WEB.CONFIG文件中修改Session状态保存模式,如:
六、结束语
Session的作用不言而喻,在实际操作和网站开发建设中,造成Session值丢失的原因很多,这就需要我们不断发现去总结错误产生的原因,找到解决的方法。
参考文献:
[1]邵良杉等,ASP.NET(C#)[M].北京:清华大学出版社,2007:192-193.