统计在线人数
做了一个统计在线人数的,刚开始好用的,后来不知哪里改了又不行了,代码如下:
void Application_Start(object sender, EventArgs e)
{
//在应用程序启动时运行的代码
//总访问量
string path = Server.MapPath("") + "/aspnet_client/login.txt";
if (!System.IO.File.Exists(path))
{
System.IO.StreamWriter sw = System.IO.File.CreateText(path);
sw.WriteLine("0");
sw.Close();
}
System.IO.StreamReader sr = System.IO.File.OpenText(path);
string str = sr.ReadToEnd();
long cou = Int32.Parse(str);
Application["count"] = cou;
sr.Close();
//当前在线
Application.Lock();
if (Application["online"] == null)
{
Application["online"] = 1;
}
Application.UnLock();
}
void Application_End(object sender, EventArgs e)
{
//在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
//在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
//在新会话启动时运行的代码
Application.Lock();
//总访问量
Application["count"] = (long)Application["count"] + 1;
long cou = (long)Application["count"];
string path = Server.MapPath("") + "/aspnet_client/login.txt";
System.IO.StreamWriter sw = new System.IO.StreamWriter(path, false);
sw.WriteLine(cou);
sw.Close();
//当前
if (Application["online"]!= null)
{
int count = Int32.Parse(Application["online"].ToString());
Application["online"] =count + 1;
}
else
{
Application["online"] = 1;
}
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
Application.Lock();
if (Application["online"] != null)
{
int count = Int32.Parse(Application["online"].ToString());
Application["online"] = count - 1;
}
else
{
Application["online"] = 0;
}
Application.UnLock();
}
哪位帮我看下,哪里错了?
------解决方案--------------------
可能是Session_End没有触发
只有在web.config文件中的sessionstate模式设置为InProc时,才会引发 Session_End事件
------解决方案--------------------
http://http://www.cnblogs.com/jhxk/articles/1773067.html
你可以看看这个 对比一下