如何在ASP.NET、VB.NET中解决此会话问题?

如何在ASP.NET、VB.NET中解决此会话问题?,asp.net,vb.net,.net-3.5,session-state,Asp.net,Vb.net,.net 3.5,Session State,如何在ASP.NET、VB.NET中解决此会话问题 有以下要求: 当授权用户登录到系统时,不允许该用户从其他计算机或其他浏览器登录,而非该用户此时正在使用的权限 我们采用的补救措施是:在mst_供应商中,我们将“Is_Loggedin”作为一列,并将数据类型“bit”作为表名。当用户登录时,我们将标志Is_Loggedin设置为“1”,每当有人试图使用此帐户登录时,系统显示错误“用户已登录” 当用户注销时,当用户单击注销按钮时注销过程调用时,它将变为“0” 问题场景: 当用户关闭浏览器时,标志保

如何在ASP.NET、VB.NET中解决此会话问题

有以下要求:

当授权用户登录到系统时,不允许该用户从其他计算机或其他浏览器登录,而非该用户此时正在使用的权限

我们采用的补救措施是:在mst_供应商中,我们将“Is_Loggedin”作为一列,并将数据类型“bit”作为表名。当用户登录时,我们将标志Is_Loggedin设置为“1”,每当有人试图使用此帐户登录时,系统显示错误“用户已登录”

当用户注销时,当用户单击注销按钮时注销过程调用时,它将变为“0”

问题场景:

  • 当用户关闭浏览器时,标志保持不变,即“1”

  • 当电源关闭时,它保持与“1”相同

  • 如果会话在预定义值之后超时,它将保持不变

  • 除此之外,可能还有其他不同的场景

  • 是否有任何方法可以使用应用程序对象存储用户登录状态的内部标记


    它可以提高系统的效率,还可以消除上述问题场景

    > P>你可以在脚本中保持一个脉冲,当脉冲超时时,考虑用户完成了那个会话。


    这样做的好处是,您可以区分闲置在站点上的用户和离开站点的用户。

    是的,脚本将是一个好主意。只需将会话超时设置为5分钟而不是20分钟,然后将方法写入
    global.asax
    文件中的
    session.end
    ,相应地更新数据库。

    将日期时间存储为位旁边的另一列,并在用户每次请求页面时更新它


    当新用户具有相同的凭据且位为“1”时,您可以检查日期时间,如果是不久前,您可以确定该用户已不在。因此,让登录继续进行。

    您应该使用
    Global.asax
    文件并使用
    Session\u End
    功能


    会话结束:。

    从最顶层的角度来看,这里是您可以做的

    • 使用带滑动过期的缓存

    • 每次用户尝试登录时,都会以其用户名作为密钥检查缓存。如果缓存中存在条目,则可以说用户已登录并拒绝登录

    • 如果找不到密钥,请允许登录并在缓存中创建一个新密钥作为用户名,并设置滑动过期时间。(应仔细选择,因为这是持续时间,在浏览器关闭且用户尝试重新登录后,用户不会被锁定。)

    • 在全局中的应用程序_PreRequestHandlerExecute处理程序中,检查用户当前是否处于活动状态(您可以为此使用会话),重置用户的滑动过期时间。这样,每个页面请求都会重置缓存过期时间

    • 如果用户关闭浏览器并离开,缓存将在设置的时间段后过期,并将释放用户重新登录

    • 如果用户试图在缓存过期之前再次登录,则用户必须等待一段时间才能让缓存过期

    • 如果用户正确注销,您可以删除注销事件上的缓存项,这样用户就不必等待重新登录

    滑动过期超时可以与会话超时同步,以模拟应用程序的实际会话超时


    使用这种方法,您还可以节省大量的数据库往返时间来更新/检查用户状态,并且无论托管环境或会话模式如何,这种方法都可以工作。

    如果发生断电,则不会触发此操作。为什么不?如果客户端断电,会话将正常超时。我假设他们的意思是一般来说,即他们的整个公司,包括服务器。事实上,服务器断电意味着会话端不会正常启动。我不确定会发生什么。恢复计划应该包括这些标志的重置。当我看到它时,我相信它,服务器怎么可能知道浏览器何时关闭?它不知道浏览器何时关闭,但是会话最终将超时,会话结束将被引发/激发。注意:会话结束只会为“InProc”会话激发。如果您想要vb.net答案,为什么要使用
    C
    C++
    标记?