SessionState采用SQL Server 模式下面,如何编写计数器程序

littleM 2004-09-23 07:20:13
为了提高网站系统的可靠性,配置使用了SQL Server 的SessionState存储模式,即将session的信息存储到sql server中,,这样在机器重新启动的时候可以保持住用户的会话状态。
但是msdn中说明: Session_OnEnd 事件仅支持进程内会话状态模式。如果您使用状态服务器或 SQL Server 模式,则不会引发该事件。

那我以前编写的计数器程序就无法正常工作了,只能加人不能减人;另外,当服务器重新启动的时候,我的计数器也被清零了。

请问有没有高手使用过SQL Server模式?上述问题该如何解决。谢谢
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
littleM 2004-10-04
  • 打赏
  • 举报
回复
谢谢各位高手的指点
cancersyf 2004-10-04
  • 打赏
  • 举报
回复
参考一下这篇文章吧,应该对你有帮助---

Page Tracking in ASP.NET:
http://www.codeproject.com/aspnet/PageTracking.asp
cancersyf 2004-10-04
  • 打赏
  • 举报
回复
使用HttpModule应该可以实现。
littleM 2004-10-04
  • 打赏
  • 举报
回复
由于在该模式下面,Session_End事件无法激发。
我准备分析.net存储的session数据库中的信息,从中统计出在线人数。
有没有人这么做过呢
goody9807 2004-09-24
  • 打赏
  • 举报
回复
一、用户显示页面的使用

  首先,我们来看看怎样现实当前网站的访问用户数量,程序代码如下:


<%@ Page Language="c#" debug="true" %>
<html>
<head>
<SCRIPT LANGUAGE="c#" RUNAT="server">
private void Page_Load(object sender, System.EventArgs e)
{
Visitors.Text = "本站当前有: <b>" + Application["user_sessions"].ToString() + "" + "</b> 位访问者 !";
}
<title>在线用户</title>
</head>
<body>
<asp:label id="visitors" runat="server" /><br>
</body>
</html>

  可以看出,以上的程序特别简单,就是调用Application。当然,我们不必要专门设计一个页面来显示在线用户数量,在网站的任何页面,我们都可以直接调用Application("user_sessions").ToString()来显示当前用户数量。

  二、global.asax文件实现

  global.asax文件的作用我们自不必说,现在,我们直接来看统计当前在线用户数量如何实现:


<script language="c#" runat="Server">
protected void Application_Start(Object sender, EventArgs e)
{
Application["user_sessions"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] + 1;
Application.Unlock();
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["user_sessions"] = (int)Application["user_sessions"] - 1;
Application.Unlock();
}
</script>

  以上代码很容易理解,当网站开始服务的时候(Application开始的时候),程序设置Application["user_sessions"]为零,然后,当用户进入网站(Session开始的时候)的时候,锁定Application,然后,将application("user_sessions")加一,用户退出网站的时候,application("user_sessions")减一。这样,就很巧妙的实现了在线用户的统计。
xiaohutushen 2004-09-24
  • 打赏
  • 举报
回复
对了。
有的是保存到了COOKIE中。
如果用户不清空的话,
估计重新启动机器后还会保留
robert2004 2004-09-24
  • 打赏
  • 举报
回复
思想不对....
关键是两个问题不能一个方法去解决...
计数器另外想个方法也可解决..................不难
xiaohutushen 2004-09-24
  • 打赏
  • 举报
回复
正如楼主所说的。
这样保存状态很难的。

到目前为止还没有见过哪个网站可以重新启动
机器后,不用重新登陆的。
yyhyy23 2004-09-24
  • 打赏
  • 举报
回复
我是来学习的
wxqq2001 2004-09-24
  • 打赏
  • 举报
回复
你的意思是不是统计在线用户啊?可以用别的方法啊,比如在数据库加个字段用于统计。
littleM 2004-09-24
  • 打赏
  • 举报
回复
当然不是为了计数器。是为了让session的状态持久化到数据库中,以提高系统的稳定性,同时在应用程序崩溃的时候也可以再重新启动iis的时候保持session的状态。
但这样就造成了一个副作用:计数器使用的Session_OnEnd 事件无法被触发,导致计数器不够准确了
leisang 2004-09-24
  • 打赏
  • 举报
回复
为了计数器就把Session放数据库?
可能没有人这样做吧?
littleM 2004-09-24
  • 打赏
  • 举报
回复
是我问题描述得不够清楚吗?还是确实没有人做这方面的东西呢

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧