版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、http:/ asp.net梦工厂群中, 有朋友寻网站当前在线人数和所有访问次数的代码,因为正好看到书上有这个例子就应了下来,结果却小弄了好一阵才搞定,不过还真有些需要注意的问题,在此总结,希望和大家共同交流。原本在 vs2003中默认已经建立的web.config文件和 global.asax,在 05 下都需要手动添加了,下面就是添加global.asax 的界面: 手动添加global.asax下面是默认生成的global.asax的代码,和03 也有了些许不同,函数的声明也有了小变化。 void application_start(object sender, eventargs e)
2、 / code that runs on application startup void application_end(object sender, eventargs e) / code that runs on application shutdown void application_error(object sender, eventargs e) / code that runs when an unhandled error occurs void session_start(object sender, eventargs e) / code that runs when a
3、 new session is started void session_end(object sender, eventargs e) / code that runs when a session ends. / note: the session_end event is raised only when the sessionstate mode / is set to inproc in the web.config file. if session mode is set to stateserver / or sqlserver, the event is not raised.
4、 这里需要注意的是session_end 事件,只有inproc 模式支持该事件,也就是说,只有将会话数据存储在asp.net 辅助进程中时才支持该事件。它标志着会话的结束,并用于执行终止该会话所需的所有清除代码。对于要引发的session_end 事件来说,必须首先存在会话状态, 这意味着必须在该会话状态中存储一些数据,并且必须至少完成一个请求。如果会话状态属性mode 为 stateserver 或 sqlserver,则忽略global.asax 文件中的session_end 事件。 如果会话状态属性mode 设置为custom,则由自定义会话状态存储提供程序决定是否支持session
5、_end 事件。会话状态的配置是通过设置web.config文件的 节来实现的。 下面介绍一下进程内模式的配置方法,它也是默认的会话状态模式。若要使用进程内模式,请将 元素的mode 属性设置为inproc。下面显示了进程内模式的一个配置设置示例。 下面是我的global.asax的完整代码, 其中在线统计的部分借鉴了msdn 中的方法, 而没有使用session 对象, 所有访问次数的统计是采用了读写文件的方式,需要在应用程序中加一个 counter.txt 文本文件。 void application_start(object sender, eventargs e) applicatio
6、nusersonline = 0; int count = 0; streamreader srd; / 取得文件的实际路径string file_path = server.mappath(counter.txt); / 打开文件进行读取srd = file.opentext(file_path); while (srd.peek() != -1) string str = srd.readline(); count = int32.parse(str); object obj = count; applicationtotalcount = obj; srd.close(); void a
7、pplication_end(object sender, eventargs e) int count = 0; count = (int)applicationtotalcount; string file_path = server.mappath(counter.txt); streamwriter fs = new streamwriter(file_path, false); fs.writeline(count); fs.close(); void application_error(object sender, eventargs e) / code that runs whe
8、n an unhandled error occurs void session_start(object sender, eventargs e) application.lock(); applicationusersonline = (int)applicationusersonline + 1; / 访问总数加1 int count = 0; count = (int)applicationtotalcount; count = count + 1; applicationtotalcount = count; / 将数据记录写入文件string file_path = server.
9、mappath(counter.txt); try streamwriter fs = new streamwriter(file_path, false); fs.writeline(count); fs.close(); catch (exception ex) applicationerror = ex.message; application.unlock(); void session_end(object sender, eventargs e) application.lock(); applicationusersonline = (int)applicationuserson
10、line - 1; application.unlock(); 下面是我的测试页面webcount.aspx,简单地在页面上加两个lable显示人数即可:using system; using system.data; using system.configuration; using system.collections; using system.web; using system.web.security; using system.web.ui; using system.web.ui.webcontrols; using system.web.ui.webcontrols.webpa
11、rts; using system.web.ui.htmlcontrols; public partial class webcount : system.web.ui.page protected void page_load(object sender, eventargs e) if (!page.ispostback) if (applicationusersonline != null) / 获取当前在线人数currentusernum.text = applicationusersonline.tostring(); if (applicationtotalcount != nul
12、l) / 获取网站总访问人数totalusernum.text = applicationtotalcount.tostring(); 具体的有关会话管理的知识可以查看帮助,这里仅就一个问题和大家讨论,路过者有熟悉的请留言或加qq :65127444 程序里之所以都使用了application ,而没有使用session,是因为我使用 一书中第10 章的模块时调试未成功:( 下面的代码是这本书中使用session 的,可我经过调试,即使多用户同时访问,也还是显示当前在线为1 。它的实现方式是:将以下代码写在session_start 中,然后在session_end 中再减 1 。 if(se
13、ssioncurrentcount != null) sessioncurrentcount = int32.parse(sessioncurrentcount.tostring() + 1; else sessioncurrentcount = 1; 然后将page_load 中显示当前人数的applicationusersonline.tostring() 改为sessioncurrentcount.tostring(),不管几个用户同时访问,每个人的浏览器显示的当前人数均为1。呵呵,总结到这里,忽然醒悟了,看来总结也是好处不少啊,呵呵,先说说我写到这里时的理解吧:对象session 仅被
14、单个用户所共享,所以,每个用户登录时,sessioncurrentcount 都为空,所以,都被赋值为1 了,似乎这也充分说明了一些写计算机书籍的人的不负责任,呵呵,随便凑合能看就出版了,代码正确率很低啊!至少,我测试得到的不是想要的结果,也许,我个人的理解有偏差?高手路过的请指点一下了!当然,利用读写文件的方式,还可以统计最大在线人数。就是将 applicationusersonline的值和用于保存最大在线人数的文件(如: maxcount.txt)中的值比较,大于则重写,小于则不改变即可。有兴趣的可以自己实现一下,呵呵,好累!继续努力了一下,呵呵,最大在线人数的也有了:/ 最大在线人数dataset objdataset = new dataset(); objdataset.readxml(server.mappath(count.xml); int maxcount = convert.toint32(objdataset.tablesmycount.rows0maxcount); applicatio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024专业桌椅买卖协议模板版B版
- 2024年专业劳务派遣服务协议范本版B版
- 湖北省2023-2024学年高二生物上学期期中联考试题含解析
- 2024年住宅回迁产权购买合同样本版B版
- 2024年合作销售代理业务协议范本版
- 2024年广告代理合同协议书
- 2024年家庭育儿嫂服务协议模板版B版
- 2024年员工放弃缴纳社会保险权益合同一
- 2024年度仓储物流服务承包合同
- 2024年商业盆景租赁协议样本版B版
- 提升教师专业素养与综合能力的培训
- 直体滚动与游戏(教学设计)人教版体育一年级上册
- 12、口腔科诊疗指南及技术操作规范
- 第三单元-设计制作-主题活动三《创意木书夹》-课件
- 数字孪生工厂解决方案
- 水利工程勘察设计投标方案
- 职业生涯人物访谈音乐教师
- 中核韶关锦原铀业有限公司745矿退役治理II期工程环评报告
- 01SS105给排水常用仪表及特种阀门安装图集
- 菌种的保藏和使用-菌种保藏技术(食品微生物检验课件)
- 高中物理实验目录及器材
评论
0/150
提交评论