我正在开发一个网络应用程序,学生可以在其中进行考试。这是显示哪些学生在管理员和教师面板中登录的要求。首先,我更新了数据库中名为 flag 的列,该列在登录时变为 1,在注销时变为 0。但是当浏览器强制关闭时,它无法更新。为此,我使用了 java 脚本方法,每当我们导航到另一个页面并显示学生已注销时都会触发该方法。
有没有相同的解决方案。
我正在开发一个网络应用程序,学生可以在其中进行考试。这是显示哪些学生在管理员和教师面板中登录的要求。首先,我更新了数据库中名为 flag 的列,该列在登录时变为 1,在注销时变为 0。但是当浏览器强制关闭时,它无法更新。为此,我使用了 java 脚本方法,每当我们导航到另一个页面并显示学生已注销时都会触发该方法。
有没有相同的解决方案。
没有简单的方法可以在用户关闭浏览器而不注销后立即更新用户的状态。您可以在Global.asax中使用Session_End事件,但这将在会话到期时触发(通常为 20 分钟)。此外,在 Session_End 中,您没有关于经过身份验证的用户的信息,只有会话 ID。
如果您使用 ASP.NET 成员身份验证您的用户,有一种方法可以满足您的需要
Membership.GetNumberOfUsersOnline()
在您的Global.asax页面上添加此代码
public void Session_Start(object sender, EventArgs e)
{
// Fires when the session is started
Application["UserCount"] = Convert.ToInt32(Application["UserCount"].ToString()) + 1;
}
public void Session_End(object sender, EventArgs e)
{
// Fires when the session ends
Application["UserCount"] = Convert.ToInt32(Application["UserCount"].ToString()) - 1;
}
在您的母版页上添加此代码
private void Page_Load(System.Object sender, System.EventArgs e)
{
//Put user code to initialize the page here
this.lblUserCount.Text = "Users online " + Application["UserCount"].ToString();
}
或者
如果您使用内置的ASP.NET
成员资格提供程序,那么有非常方便的Membership.GetNumberOfUsersOnline()方法。