我正在创建一个用户无法尝试多次登录的应用。如果某个用户登录,我的数据库标志值设置为 1 ,这意味着没有其他具有相同用户名和密码的成员可以登录。
如果用户退出,我的数据库标记值设置为0. 这一切正常,但现在我有一个不同的问题当用户突然关闭浏览器而没有退出页面或会话超时时,数据库标志值应自动设置为0.
我正在搜索这篇文章说有些文章可以使用global.asax文件。我尝试过,但到目前为止没有任何事情发生。请你能帮帮我吗?
答案 0 :(得分:4)
检测用户已关闭浏览器窗口的唯一安全方法是通过心跳。也就是说,浏览器不断向服务器发送请求,让它知道它仍然存在。由于ASP.net会跟踪会话,因此会在检测到不活动后调用会话结束处理程序。
因此,如果您将会话超时设置为一分钟,并且每45秒继续发送一次请求,则会调用最多一分钟延迟的会话结束处理程序
答案 1 :(得分:2)
注意:关闭浏览器不会自动导致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
}