我正在创建一个用户无法尝试多次登录的应用程序。如果特定用户登录,我的数据库标志值将设置为1,这意味着没有其他具有相同用户名和密码的成员可以登录。
如果用户注销我的数据库标志值设置为 0。一切正常,但现在我有一个不同的问题,即当用户突然关闭浏览器而没有注销页面或会话超时时,应自动设置数据库标志值为 0。
我正在搜索一些文章说它可以使用 global.asax 文件发生。我试过了,但到目前为止什么也没发生。请问你能帮我吗?
我正在创建一个用户无法尝试多次登录的应用程序。如果特定用户登录,我的数据库标志值将设置为1,这意味着没有其他具有相同用户名和密码的成员可以登录。
如果用户注销我的数据库标志值设置为 0。一切正常,但现在我有一个不同的问题,即当用户突然关闭浏览器而没有注销页面或会话超时时,应自动设置数据库标志值为 0。
我正在搜索一些文章说它可以使用 global.asax 文件发生。我试过了,但到目前为止什么也没发生。请问你能帮我吗?
检测用户关闭浏览器窗口的唯一安全方法是通过检测信号。也就是说,浏览器不断向服务器发送请求,让它知道它还活着。由于 ASP.net 会跟踪会话,因此它将在检测到不活动后调用您的会话结束处理程序。
因此,如果您将会话超时设置为一分钟,并且每 45 秒发送一次请求,您的会话结束处理程序将被调用,最多延迟一分钟
注意:关闭浏览器不会自动触发 Session_End 事件。Session_End 事件将在会话过期一定时间后触发 - 此超时值在 IIS 中设置 - 默认设置为 20 分钟。将用户设置为非活动状态的唯一方法是依靠 JavaScript 向结束会话的 Web 方法发出 ajax 请求。
您将看到以下对话框(在 Visual Studio 2010 中 - 其他版本类似)
您现在应该看到一个包含一些事件的文件,其中之一是Session_End
. 将结束用户会话的任何代码放在这里:
protected void Session_End(object sender, EventArgs e)
{
// put your code that logs a user out here
}
为了确保会话在用户关闭浏览器时结束,您需要依赖 JavaScript注意如果用户关闭了 JavaScript,这将不起作用。 在网站的每个页面上,您都需要添加如下内容:
window.onbeforeunload = function () {
// write an ajax call to a Web Method on your site that ends the session
}