gpt4 book ai didi

ASP.NET:这个在线用户计数器出了什么问题?

转载 作者:行者123 更新时间:2023-12-02 18:40:30 25 4
gpt4 key购买 nike

我正在尝试计算在线用户的数量。

这是代码:

protected void Application_Start()
{
...
Application["OnlineUsers"] = 0;
}

private void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Session["O"] = "OO"; // Need to have something in the session
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
Application.UnLock();
}


private void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
Application.UnLock();
}

There are <b>@Context.ApplicationInstance.Application["OnlineUsers"].ToString()</b> users online

这确实有效,但我的值(value)总是大于实际在线用户数量。

更糟糕的是:在 Opera 中刷新页面 N 次,在线用户数增加了 N!

最佳答案

这里需要注意的是ASP.NET正在努力为用户极其高效地存储 session 。如果ASP.NET没有理由记住你是谁,它就不会

当我们第一次请求页面时,将创建一个 session 对象,并将其 session 标识符发送到网络浏览器,以便浏览器可以将 session 标识符存储在 cookie 中(用于请求的身份)。如果该页面再次提交/回发,则来自 cooike 的相同 session 标识符将可供应用程序服务器使用,并且它假定这是旧请求。但在你的情况下(你正在引用一个页面),这意味着网络浏览器发出一个新的请求(当然请求类型将是 GET)而不发送 cookie。因此,最好在第一次请求时将用户重定向到特定页面。

当 session 超时(默认值为 20 分钟)时,即使客户端(浏览器)关闭(或结束 session ),也会调用 Session_End 事件句柄。

关于ASP.NET:这个在线用户计数器出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com