在C#中,在Web.Config文件中加入<sessionState mode="InProc"></sessionState>语句

在Web.Config文件中加入<sessionStatemode="InProc"></sessionState>语句,但是在关闭IE页面时好像并未触发Session_... 在Web.Config文件中加入<sessionState mode="InProc"></sessionState>语句,但
是在关闭IE页面时好像并未触发Session_End事件。我实验了一个用于记录来访人数
的小网页程序,使用了Application["visitor_counter"]变量。首先修改Web.config
文件,将上面的<session...>语句加入其<Configuration><system.web>下。然后在
Session_Start事件中使用如下语句:
Application.Lock();
Application["visitor_counter"]=(int)Application["visitor_counter"]+1;
Application.UnLock();
在Session_End事件中使用如下语句:
Application.Lock();
Application["visitor_counter"]=(int)Application["visitor_counter"]-1;
Application.UnLock();
最后在default.asp中加入了一个Label元素,将Application["visitor_counter"]信
息以字符串格式输出。
结果是每打开一次网页,Application["visitor_counter"]值就增1,但是关闭网页
并未是其减少1。请问这是怎么回事,如何解决。
展开
 我来答
liuleiqt
2008-09-17 · TA获得超过1285个赞
知道小有建树答主
回答量:1953
采纳率:0%
帮助的人:375万
展开全部
除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个 session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。

怎么解决呢?
由于关闭浏览器不会导致session被删除,所以服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
大概是你关闭及统计需要一定的时间反应,刷新几下是不是减1了?
要是还没有,那你通知我,让我想想是怎么回事
取名晕倒
2008-09-23 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:72.2万
展开全部
Application是程序级别的变量,你只关闭网页,并未关闭程序啊.你把IIS停一下,或者把www服务停下,我没试过你自己试试吧.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式