我想知道我是否可以计算一个特定的 session 变量。 我想计算当前有多少用户登录到该站点以及有多少用户正在访问该站点。 这是我所做的(代码)
public void Session_OnStart()
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
public void Session_OnEnd()
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
这段代码工作正常,但现在我不知道如何计算已登录的用户数。我想做类似的事情:
public void Session_OnStart()
{
if (Session["IsLoggedIn"] == "true")
{
Application.Lock();
Application["UsersLoggedIn"] = (int)Application["UsersLoggedIn"] + 1;
Application.UnLock();
}
}
然后如果 session 关闭,它将从 Application["UsersLoggedIn"] 中减去 1。我的问题是我不能在 session 开始时计算“IsLoggedIn” session ,因为它是空的,因此它不会工作。所以现在我们来回答我的问题,无论如何都可以触发该应用程序变量的计数吗?喜欢在该 session 为真时创建一个事件,然后告诉应用程序将 +1 添加到该事件的计数器?如果我的问题不清楚,我很抱歉,如果不清楚,请问我更多细节,而你只是不知道我想从你这里得到什么。 感谢您的帮助!
最佳答案
肮脏、hacky、低效的解决方案(假设使用表单例份验证):
public void Global_BeginRequest(object sender, EventArgs e)
{
if(
Context.User != null &&
!String.IsNullOrWhiteSpace(Context.User.Identity.Name) &&
Context.Session != null &&
Context.Session["IAMTRACKED"] == null
)
{
Context.Session["IAMTRACKED"] = new object();
Application.Lock();
Application["UsersLoggedIn"] = Application["UsersLoggedIn"] + 1;
Application.UnLock();
}
}
在高层次上,这通过在每个请求上检查用户是否已登录,如果是,则将用户标记为已登录并递增登录。这假设用户无法注销(如果可以,您可以为已注销和跟踪的用户添加类似的测试)。
这是解决问题的糟糕方法,但它是一个工作原型(prototype),表明您的问题是可以解决的。
请注意,这大大低估了应用程序回收后的登录;登录的期限比 session 长得多。
关于c# - 如何计算特定 session 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29130634/