Asp.net 防止多次登录

Asp.net 防止多次登录,asp.net,Asp.net,我正在创建一个应用程序,其中用户无法尝试多次登录。如果某个特定的用户登录,我的数据库标志值将设置为1,这意味着没有其他具有相同用户名和密码的成员可以登录 如果用户注销我的数据库标志值设置为0。这一切正常,但现在我有一个不同的问题,即当用户在没有注销页面的情况下突然关闭浏览器或会话超时时,数据库标志值应自动关闭设置为0 我正在搜索这篇文章,一些文章说它可以使用global.asax文件实现。我试过了,但到目前为止什么也没发生。你能帮我吗 注意:关闭浏览器不会自动触发会话结束事件。会话结束时,会话结

我正在创建一个应用程序,其中用户无法尝试多次登录。如果某个特定的用户登录,我的数据库标志将设置为1,这意味着没有其他具有相同用户名和密码的成员可以登录

如果用户注销我的数据库标志值设置为0。这一切正常,但现在我有一个不同的问题,即当用户在没有注销页面的情况下突然关闭浏览器会话超时时,数据库标志值应自动关闭设置为0

我正在搜索这篇文章,一些文章说它可以使用global.asax文件实现。我试过了,但到目前为止什么也没发生。你能帮我吗

注意:关闭浏览器不会自动触发会话结束事件。会话结束时,会话结束事件将在一定时间后触发-此超时值在IIS中设置-默认设置为20分钟。将用户设置为非活动的唯一方法是依靠JavaScript向结束会话的Web方法发出ajax请求

  • 在web应用程序的根目录中创建新的全局应用程序类(Global.ascx)文件。要执行此操作,请在Visual Studio的解决方案资源管理器中右键单击网站项目节点,然后选择“添加->新建项”
  • 您将看到以下对话框(在Visual Studio 2010中-其他版本类似)

  • 单击添加并查看新的global.asax文件的代码隐藏
  • 您现在应该看到一个包含一些事件的文件,其中一个是
    Session\u 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
    
    }
    
  • 注意:关闭浏览器不会自动触发会话结束事件。会话结束时,会话结束事件将在一定时间后触发-此超时值在IIS中设置-默认设置为20分钟。将用户设置为非活动的唯一方法是依靠JavaScript向结束会话的Web方法发出ajax请求

  • 在web应用程序的根目录中创建新的全局应用程序类(Global.ascx)文件。要执行此操作,请在Visual Studio的解决方案资源管理器中右键单击网站项目节点,然后选择“添加->新建项”
  • 您将看到以下对话框(在Visual Studio 2010中-其他版本类似)

  • 单击添加并查看新的global.asax文件的代码隐藏
  • 您现在应该看到一个包含一些事件的文件,其中一个是
    Session\u 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
    
    }
    

  • 检测用户已关闭浏览器窗口的唯一安全方法是通过心跳。也就是说,浏览器不断向服务器发送请求,让服务器知道它仍然处于活动状态。由于ASP.net跟踪会话,它将在检测到不活动后调用会话结束处理程序


    因此,如果您将会话超时设置为一分钟,并保持每45秒发送一次请求,则将以最多一分钟的延迟调用会话结束处理程序。检测用户已关闭浏览器窗口的唯一安全方法是通过心跳。也就是说,浏览器不断向服务器发送请求,让服务器知道它仍然处于活动状态。由于ASP.net跟踪会话,它将在检测到不活动后调用会话结束处理程序


    因此,如果您将会话超时设置为1分钟,并保持每45秒发送一次请求,您的会话结束处理程序将被调用,最多延迟一分钟

    我猜您指的是global.asax,而不是globel.ascx。我是说您的权利,因为我错误地写了sorryHi@Aties,您可以发布您放在会话结束事件处理程序中的代码吗?Response.Write(“SessionID:+session.SessionID.ToString()+”用户键:+(string)session[“user”];if(Session[“user”!=null)//例如,这是在初次登录之后{string sKey=(string)Session[“user”];//访问缓存项会自动延长滑动过期时间string sUser=(string)HttpContext.Current.Cache[sKey];我猜你指的是global.asax而不是globel.ascx。我错写了sorryHi@Aties,你可以发布你放在会话中的代码吗?结束事件处理程序?Response.Write(“SessionID:+Session.SessionID.ToString()+”用户键:+(string)会话[“User”];if(会话[“User”!=null)//例如,这是在初始登录后{string sKey=(string)会话[“user”];//访问缓存项会自动延长滑动过期时间string sUser=(string)HttpContext.Current.Cache[sKey];祖父母皮特先生,这一切都很好,我也厌倦了这个文件,但当用户突然关闭浏览器或会话超时时,时间数据库值应该为“0”"意味着其他人可以登录。此步骤im not gettingAJAX请求被onbeforeunload处理程序阻止,您可以对其进行破解,使其几乎可以工作,但它不会适用于所有浏览器。此外,当您导航到另一个页面时,onbeforeunload会触发。简单的方法是客户端继续发送请求,让服务器保持会话正常ive,然后您可以将会话超时设置为略大于心跳间隔,请参阅我的回答Pete sir,这一切都很好,我在该文件中也很累,但当用户突然关闭浏览器或会话超时时,该时间数据库值已超出