c# - 如何计算特定 session 变量?

标签 c# asp.net session session-variables

我想知道我是否可以计算一个特定的 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/

相关文章:

c# - 在 LINQ 查询期间读取文件

c# - 数据库中没有发生数据插入

postgresql - Postgres session 空闲,查询 = COMMIT 或 ROLLBACK

php - 相同的服务器,不同的域需要不同的 session

c# - 在 WPF/C# 中显示时区。发现夏令时偏移

c# - 如何更改行 MouseOver 上的 GridView 单元格颜色

c# - 如何在 ASP.NET 中使用 Web 应用程序实现两阶段提交?

asp.net - CSS 压缩和组合/js 缩小 - 最好在运行时或构建时进行?

python - 从数据库或 session 数据填充字段的正确方法是什么?

c# - 像 c# 一样的 swift 静态扩展