如何在ASP.NET服务器应用程序中计算会话次数

7

有一种方法可以管理ASP.NET运行应用程序的会话数量吗?如果有,我想在页面上展示它,可能还有其他重要信息。那么,我该怎么做呢?


是的,没错!但如果我们能获得更有价值的信息,比如资源消耗情况,那就太好了! - Alex
好的。在我的答案中,你可以从Session中检索、更新和存储一个用户信息数组(而不是单个App元素)。这样你就会有一个漂亮的包含所有用户信息的数组。 - Nick Rolando
你的应用程序使用 stateserver 还是 InProc?也许使用 _性能监视器统计信息_(通过 WMI 编程) - Kiquenet
2个回答

17

global.asax文件中,执行以下操作:

处理Application.Start事件,并添加以下内容:

Application["LiveSessionsCount"] = 0;

处理Session.Start事件,添加以下内容:

Application["LiveSessionsCount"] = ((int) Application["LiveSessionsCount"]) + 1;

在处理Session.End事件时,请添加以下内容:

Application["LiveSessionsCount"] = ((int) Application["LiveSessionsCount"]) - 1;

要在页面内检索会话计数,请编写以下内容:

int LiveSessionsCount = (int) Application["LiveSessionsCount"];

1
@Haris 阅读:http://www.codeproject.com/Articles/21156/ASP-NET-HttpModule-for-handling-session-end-with-S - Akram Shahda
2
需要使用锁定/解锁,因为读取、增量和设置值是三个步骤,在它们之间会有并行创建或终止会话的情况。请参见 https://dev59.com/BUfRa4cB1Zd3GeqP5gNB#41192294。 - George Birbilis

2
也许在您的global.asax文件中,可以使用Session_Start和Session_End事件将会话信息存储到应用程序状态对象中的userinfo数组中。然后您可以在整个应用程序中通过App State管理此数组。

这个解决方案计算应用程序对象中存储的所有值,而不仅仅是会话数。对于繁忙的站点,它还浪费了大量的内存。你只需要一个整数即可。 - ShadowChaser
1
@ShadowChaser 他想要“管理”会话信息,而不仅仅是统计已登录的人数。虽然,我应该在应用程序状态中有一个单独的数组来存储这些信息。 - Nick Rolando
1
注意:stateserver Session_End 不起作用,仅适用于 InProc - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接