A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 淡忘回忆 中级黑马   /  2013-10-5 22:26  /  2926 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 淡忘回忆 于 2013-10-13 14:46 编辑

我要做一个同时在线人数的功能,登录后用session存用户信息,怎么统计有多少个session啊,还有就是不要把不同的session都统计到一起啊

5 个回复

倒序浏览
这个好像是只能创建一个session,然后记录下保存到数据库或者txt文件。
要是统计的话,你可以用application呀,比这个好多了!
回复 使用道具 举报
在网站中添加一个Global.asax全局应用程序文件.
Global.asax
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
//应用程序启动时运行的代码
Application["count"] = 0;
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
//对Appliaction加锁以防止并行性
Application.Lock();
//增加一个在线人数
Application["count"] = (int)Application["count"] + 1;
//解锁
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
Application.Lock();
//减少一个在线人数
Application["count"] = (int)Application["count"] - 1;
Application.UnLock();
}
</script>
default.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%Response.Write(Application["count"]); %>
</div>
</form>
</body>
</html>
回复 使用道具 举报
ˋ初°见 发表于 2013-10-11 12:47
在网站中添加一个Global.asax全局应用程序文件.
Global.asax

我记得这个好像有点BUG,退出时不能减少计数
回复 使用道具 举报
这是我写的统计在线人数的方法 希望适合你 放在global中最好  因为aplication是直接在程序开始时运行的
  1. protected void Application_Start(Object sender, EventArgs e)
  2.         {
  3.             AreaRegistration.RegisterAllAreas();

  4.             RegisterGlobalFilters(GlobalFilters.Filters);
  5.             RegisterRoutes(RouteTable.Routes);
  6.             if (Application["User_Sesstions"] == null)
  7.             {
  8.                 Application["User_Sesstions"] = 0;
  9.             }
  10.         }
  11.         protected void Session_Start(Object sender, EventArgs e)
  12.         {
  13.             Application.Lock();
  14.             Application["User_Sesstions"] = (int)Application["User_Sesstions"] + 1;
  15.             Application.UnLock();
  16.         }

  17.        protected void Session_End(Object sender, EventArgs e)
  18.        {
  19.            Application.Lock();
  20.            Application["User_Sesstions"] = (int)Application["User_Sesstions"] - 1;
  21.            Application.UnLock();
  22.            Hashtable table = (Hashtable)Application["Online"];
  23.            if (table[Session.SessionID] != null)
  24.            {
  25.                table.Remove(Session.SessionID);
  26.            }
  27.                Application["Online"] = table;
  28.        }
复制代码
回复 使用道具 举报
定义一个int型全局变量并赋初值为0   ,然后在专门用于保存用户信息的Sessiond的代码 后面让全局变量自增+1
在用户退出登陆后或者在一定时间内 无Post操作后 销毁对应Session信息后 让全局变量自减-1
统计在线人数 建议还是用Application。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马