问题描述
我家网站不进入session_end方法,现在客户需要做一个在线统计人数的功能,而且想要精确一点的,有大神能提供一下思路么?
解决方案
解决方案二:
referhere:
解决方案三:
应用实例:最后一个截图。文章最后一个链接
解决方案四:
什么session_startsession_end都是假的LZ别被骗了..难道我不关浏览器强制关机也能触发服务器的session_end吗?别逗了...所以那东西只是初略的统计下,并且实时性不强要想准确,客户端一定要有一个<长连接>.否则别谈什么"精确"
解决方案五:
引用3楼diaodiaop的回复:
什么session_startsession_end都是假的LZ别被骗了..难道我不关浏览器强制关机也能触发服务器的session_end吗?别逗了...所以那东西只是初略的统计下,并且实时性不强要想准确,客户端一定要有一个<长连接>.否则别谈什么"精确"
是啊,考虑到用户直接关闭浏览器或者直接拔电源的情况。的确不能做到精确,如果通过socket来做链接判断,用户打开第二个页面的时候又会多一个链接。所以现在很苦恼
解决方案六:
登陆时把用户名写数据库里,并写入当前时间然后做个心跳,定时更新当前时间查询的时候查询时间在某个范围内的(超时不更新的不统计)
解决方案七:
:.net网站统计在线人数问题//记录在线人数<asp:LabelID="lblCount"runat="server"></asp:Label>//显示在线人数protectedvoidPage_Load(objectsender,EventArgse){lblCount.Text="您是第"+Application["count"].ToString()+"位访客";}//触发Session_Start事件调用Global.aspx全局类初始化时间记录来访人数<%@ApplicationLanguage="C#"%><scriptrunat="server">voidApplication_Start(objectsender,EventArgse){//在应用程序启动时运行的代码Application["count"]=0;}voidApplication_End(objectsender,EventArgse){//在应用程序关闭时运行的代码}voidApplication_Error(objectsender,EventArgse){//在出现未处理的错误时运行的代码}voidSession_Start(objectsender,EventArgse){//在新会话启动时运行的代码Application.Lock();Application["count"]=(int)Application["count"]+1;Application.UnLock();}voidSession_End(objectsender,EventArgse){//在会话结束时运行的代码。//注意:只有在Web.config文件中的sessionstate模式设置为//InProc时,才会引发Session_End事件。如果会话模式//设置为StateServer或SQLServer,则不会引发该事件。Application.Lock();Application["count"]=(int)Application["count"]-1;Application.UnLock();}</script>
解决方案八:
.net网站统计在线人数为什么要用Application?用RedisorMemcached啊!使用Application统计在线人数是坑爹中的战斗机。1、Application是非常耗资源的,尤其是访问人数一多的情况下,会爆卡。2、Application在服务器一重启or断电的情况下,是会丢失的为什么用Redis?1、高性能,每秒钟可以读取8100次,写11000次2、高可用,在宕机or服务器重启的情况下,不会影响到统计结果3、支持分布式,可以部署在单独的服务器上面。
解决方案九:
还少写了个0,Redis是每秒钟可以读取81000次,写110000次
解决方案十:
引用5楼Z65443344的回复:
登陆时把用户名写数据库里,并写入当前时间然后做个心跳,定时更新当前时间查询的时候查询时间在某个范围内的(超时不更新的不统计)
你有没有考虑并发量很大的情况!!!!
解决方案十一:
引用7楼zouyujie1127的回复:
.net网站统计在线人数为什么要用Application?用RedisorMemcached啊!使用Application统计在线人数是坑爹中的战斗机。1、Application是非常耗资源的,尤其是访问人数一多的情况下,会爆卡。2、Application在服务器一重启or断电的情况下,是会丢失的为什么用Redis?1、高性能,每秒钟可以读取8100次,写11000次2、高可用,在宕机or服务器重启的情况下,不会影响到统计结果3、支持分布式,可以部署在单独的服务器上面。
虽然application是比较常用的方式,但也是非常耗资源的;建议换种方式,几种方式比较一下,再决定用哪种方式;