NinetyNine's Treasure

| 积淀孕育创新 智慧创造价值|
posts - 76, comments - 185, trackbacks - 3, articles - 14
************************************在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 (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-08-07 01:16 编辑过
成果网帮您增加网站收入


相关链接: