NinetyNine's Treasure
| 积淀孕育创新 智慧创造价值|
posts - 76, comments - 185, trackbacks - 3, articles - 14
Asp.Net实现记录历史访问人数和当前在线人数
Posted on 2007-08-06 20:48
(NineTyNine)
阅读(2214)
评论(17)
编辑
收藏
所属分类:
.Net其他相关
************************************在Global.asax中如下************************
起始:
protected
void
Application_Start(Object sender, EventArgs e)
//
当前应用程序启动这件事会发生
{
SqlConnection con
=
new
SqlConnection(
"
server=.;database=countPeople;uid=sa;pwd=;
"
);
con.Open();
SqlCommand cmd
=
new
SqlCommand(
"
select * from countPeople
"
,con);
int
count
=
Convert.ToInt32(cmd.ExecuteScalar());
con.Close();
Application[
"
total
"
]
=
count;
//
Application是个全局变量,每个会话都可对他操作
Application[
"
online
"
]
=
0
;
}
protected
void
Session_Start(Object sender, EventArgs e)
//
客户端一连接到服务器上,这个事件就会发生
{
Session.Timeout
=
1
;
Application.Lock();
//
锁定后,只有这个Session能够会话
Application[
"
total
"
]
=
(
int
)Application[
"
total
"
]
+
1
;
Application[
"
online
"
]
=
(
int
)Application[
"
online
"
]
+
1
;
Application.UnLock();
//
会话完毕后解锁
}
结尾:
protected
void
Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application[
"
online
"
]
=
(
int
)Application[
"
online
"
]
-
1
;
Application.UnLock();
}
protected
void
Application_End(Object sender, EventArgs e)
{
SqlConnection con
=
new
SqlConnection(
"
server=.;database=countPeople;uid=sa;pwd=;
"
);
con.Open();
SqlCommand cmd
=
new
SqlCommand(
"
updata countPeople set num=
"
+
Application[
"
total
"
],con);
cmd.ExecuteNonQuery();
con.Close();
}
*****************************************在Aspx文件中如下*********************************
private
void
Page_Load(
object
sender, System.EventArgs e)
{
this
.lblTotal.Text
=
Application[
"
total
"
].ToString();
this
.lblOnline.Text
=
Application[
"
online
"
].ToString();
//
在此处放置用户代码以初始化页面
}
NinetyNine原创
Feedback
#1楼
回复
引用
2007-08-07 00:58 by
kisskiki [未注册用户]
似乎这样的文章比比皆是,也没看出一点特别的地方,放在首页不合适吧?
#2楼
回复
引用
2007-08-07 00:59 by
kisskiki [未注册用户]
btw:
这样的统计如果是具体到每个网页的访问次数了?你不会也用applciation吧?
#3楼
[
楼主
]
回复
引用
查看
2007-08-07 01:34 by
Ninety-Nine
@kisskiki
哦。我是第一次使用博客园的博客。对其中的一些东西还不是很了解。望赐教。
#4楼
[
楼主
]
回复
引用
查看
2007-08-07 02:13 by
Ninety-Nine
@kisskiki
对于具体到每个页面的访问次数我会想出好办法的。
那么在每个页面的Page_Load(){}里都加上对数据库中统计表的更新是不是一个可行的办法?
#5楼
回复
引用
2007-08-07 06:32 by
剑在上海^^ [未注册用户]
@Ninety-Nine
每访问一个页面都对数据库更新...ORZ,并发不出问题就有鬼了
#6楼
回复
引用
查看
2007-08-07 06:54 by
布尔
加上IP实现每个城市的在线人数统计
北京:3
上海:2
#7楼
回复
引用
2007-08-07 07:59 by
allnonsense [未注册用户]
Session_End 事件不会触发
#8楼
回复
引用
查看
2007-08-07 08:05 by
Wuya
我认为楼主的保存人数的逻辑理论上可行,但实际上不可靠。
因为很多服务器在很长一段时间内都不会出问题,不关机,也不重启,但是往往在出问题的时候强行关机或重启,那么就不会执行Application_End事件;结果是,若干天的统计数据没有得到保存。
建议:在Session的某个事件中额外增加保存代码,不过使用某种控制方式(比如定时,定量)使之并非每次都保存到数据库。
#9楼
回复
引用
2007-08-07 08:17 by
netec [未注册用户]
这种方法并不可行.以前用过.并发数多的时候会必致系统速度严重变慢
#10楼
回复
引用
查看
2007-08-07 08:32 by
木鱼
@剑在上海^^
貌似没有对每个页面访问的时候都更新数据库把??
@Wuya
好像这个确实是一个实在的问题,得好好研究下
#11楼
回复
引用
2007-08-07 08:50 by
dominic [未注册用户]
乍一看很有道理,当访问量到一定规模的时候,整个系统架构会发生很大的变化,如果部署在反向代理和负载均衡器后面,Session会不再对每个访问者有用,因为他们会最大利用现有链接,这样的统计会比实际小,以前也这样,现在全部用第三方统计了。
使用session不利于大访问量站点扩展系统架构。
#12楼
[
楼主
]
回复
引用
查看
2007-08-07 09:29 by
Ninety-Nine
@布尔
re: Asp.Net实现记录历史访问人数和当前在线人数
加上IP实现每个城市的在线人数统计
北京:3
上海:2
请问:具体怎样实现?初学者,望赐教。
#13楼
[
楼主
]
回复
引用
查看
2007-08-07 09:32 by
Ninety-Nine
@Wuya
您的意思是先记录。然后再统一入库吗?
#14楼
[
楼主
]
回复
引用
查看
2007-08-07 09:38 by
Ninety-Nine
@dominic
呵呵。我刚学.net半年。您的话我有很多地方都不懂。
1.当访问量到一定规模的时候,整个系统架构会发生很大的变化?为什么?
2.反向代理和负载均衡器,这些是用来做什么的?
#15楼
回复
引用
查看
2007-08-07 10:32 by
Clark Zheng
利用asp.net的权限模型可以获取当前在线用户
<script runat="server">
private void Page_PreRender()
{
MembershipUserCollection allUsers = Membership.GetAllUsers();
MembershipUserCollection filteredUsers = new MembershipUserCollection();
bool isOnline = true;
foreach (MembershipUser user in allUsers)
{
if (user.IsOnline == isOnline)
{
filteredUsers.Add(user);
}
}
Users.DataSource = filteredUsers;
Users.DataBind();
}
</script>
<asp:GridView runat="server" ID="Users" AutoGenerateColumns="false"
CssClass="list" AlternatingRowStyle-CssClass="odd" GridLines="none"
AllowSorting="true"
>
<Columns>
<asp:BoundField DataField="username" HeaderText="User Name" />
<asp:BoundField DataField="email" HeaderText="Email" />
<asp:BoundField DataField="comment" HeaderText="Comments" />
<asp:BoundField DataField="creationdate" HeaderText="Creation Date" />
<asp:BoundField DataField="lastlogindate" HeaderText="Last Login Date" />
<asp:BoundField DataField="lastactivitydate" HeaderText="Last Activity Date" />
<asp:BoundField DataField="isapproved" HeaderText="Is Active" />
<asp:BoundField DataField="isonline" HeaderText="Is Online" />
<asp:BoundField DataField="islockedout" HeaderText="Is Locked Out" />
</Columns>
</asp:GridView>
#16楼
[
楼主
]
回复
引用
查看
2007-08-07 12:23 by
Ninety-Nine
@Clark Zheng
谢谢指点。
#17楼
回复
引用
2007-10-19 09:46 by
wentvic [未注册用户]
请问老大,怎么实现今日访问量啊?谢谢!
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
博客园首页
新闻频道
社区
小组
博问
网摘
闪存
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-08-07 01:16 编辑过
成果网帮您增加网站收入
相关文章:
使用Visual Studio2005入门.Net2.0系列视频教程
Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
prototype.js 1.4版开发者手册(强烈推荐)
关于IE问题,请教和求救
Net如何统计在线人数
智能实验室-全能优化(Guardio) 3.8.0.525-全面优化和保护您的计算机!
相关链接:
所属分类的其他文章:
automation服务器不能创建对象
请教:“不是有效的 Win32 资源文件”??
常用代码总结
关于8月8日提出的问题《treeview的非常规动态绑定》--自己的笨解决方法
请教:treeview的非常规动态绑定
请教:复杂的权限设置问题
发送邮件
导出Excel表
制作漂亮的验证码
创建Command后的一系列Execute方法
最新IT新闻:
JavaScript将成Silverlight的最大对手?
没有谷歌就活不下去的四个网站
Google 10周岁生日
祝Google 10周岁生日快乐
Google十年市值达1500亿美元 创造奇迹
Powered by:
博客园
Copyright © (NineTyNine)
导航
博客园
首页
新随笔
联系
订阅
管理
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(1)
给我留言
查看留言
我管理的小组
专注.NET技术
.NET家园
我参加的小组
创业交流
程序员音乐空间
ASP.NET
web标准设计
ASP.NET AJAX
jQuery
Visual Studio
javascript
设计模式
AJAX
我参与的团队
Debug 探索团队(0/51)
随笔分类
(100)
.Net控件相关(22)
.Net其他相关(15)
ActiveX相关
Ajax相关
C#相关(31)
FrameWork(1)
HTML+CSS相关(1)
JavaScript相关(3)
Nhibernate相关
Silverlight相关
SQL相关(13)
Visual Studio Team System(VSTS)
windows相关(7)
三层架构(1)
设计相关(4)
心得体会(1)
正则表达式(1)
随笔档案
(76)
2008年3月 (2)
2008年1月 (1)
2007年12月 (10)
2007年11月 (6)
2007年10月 (5)
2007年9月 (19)
2007年8月 (33)
文章分类
(13)
藏经阁(4)
读文有摘(3)
生活随感(2)
心情天空(4)
相册
page
收藏夹
(14)
.Net控件相关(3)
.Net其他相关(2)
ActiveX相关
Ajax相关(1)
C#相关(7)
HTML相关
JavaScript相关
Nhibernate相关
Silverlight相关(1)
SQL相关
Visual Studio Team System(VSTS)
Windows相关
设计相关
正则表达式
最新评论
1. re: C# 多态
顶一下!!!
--谢小妹
2. re: C# 多态
--引用-------------------------------------------------- cai: override 是重写,而不是重载,overload才是重载。 -------...
--cx8989
3. re: 请教:C# throw的作用
我来迟了,学习一下
--seeis
4. re: 此域的推荐安全级别是 "安全级 - 高"
XP.里面怎么没有啊.出现的情况一样.如何解决.注册表.minlevel 16进制.为10000.没有关系里.还有其它方法没有.看到消息,回个邮箱.一起讨论一下.谢谢
--杨学青
5. re: 请教:向数据库插入空值:DateTime型
DateTime? dt =(DateTime?)mydate 用dt插入数据库
--牛仁
阅读排行榜
1. Asp.Net实现记录历史访问人数和当前在线人数(2214)
2. 报错:将截断字符串或二进制数据。语句已终止。(1713)
3. 请教:C# throw的作用(1500)
4. 关于8月8日提出的问题《treeview的非常规动态绑定》--自己的笨解决方法(1349)
5. C# 多态(1130)
评论排行榜
1. Asp.Net实现记录历史访问人数和当前在线人数(17)
2. 请教:treeview的非常规动态绑定(11)
3. ASP.NET中DataGrid加序号(10)
4. 关于8月8日提出的问题《treeview的非常规动态绑定》--自己的笨解决方法(8)
5. 请教:数据库字段类型为datatime,请问在.net里怎样转换为datetime类型来插入数据库?(8)