如何在ASP.NET、VB.NET中解决此会话问题?
如何在ASP.NET、VB.NET中解决此会话问题 有以下要求: 当授权用户登录到系统时,不允许该用户从其他计算机或其他浏览器登录,而非该用户此时正在使用的权限 我们采用的补救措施是:在mst_供应商中,我们将“Is_Loggedin”作为一列,并将数据类型“bit”作为表名。当用户登录时,我们将标志Is_Loggedin设置为“1”,每当有人试图使用此帐户登录时,系统显示错误“用户已登录” 当用户注销时,当用户单击注销按钮时注销过程调用时,它将变为“0” 问题场景:如何在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” 问题场景: 当用户关闭浏览器时,标志保
它可以提高系统的效率,还可以消除上述问题场景 > P>你可以在脚本中保持一个脉冲,当脉冲超时时,考虑用户完成了那个会话。
这样做的好处是,您可以区分闲置在站点上的用户和离开站点的用户。是的,脚本将是一个好主意。只需将会话超时设置为5分钟而不是20分钟,然后将方法写入
global.asax
文件中的session.end
,相应地更新数据库。将日期时间存储为位旁边的另一列,并在用户每次请求页面时更新它
当新用户具有相同的凭据且位为“1”时,您可以检查日期时间,如果是不久前,您可以确定该用户已不在。因此,让登录继续进行。您应该使用
Global.asax
文件并使用Session\u End
功能
会话结束:。从最顶层的角度来看,这里是您可以做的
- 使用带滑动过期的缓存
- 每次用户尝试登录时,都会以其用户名作为密钥检查缓存。如果缓存中存在条目,则可以说用户已登录并拒绝登录
- 如果找不到密钥,请允许登录并在缓存中创建一个新密钥作为用户名,并设置滑动过期时间。(应仔细选择,因为这是持续时间,在浏览器关闭且用户尝试重新登录后,用户不会被锁定。)
- 在全局中的应用程序_PreRequestHandlerExecute处理程序中,检查用户当前是否处于活动状态(您可以为此使用会话),重置用户的滑动过期时间。这样,每个页面请求都会重置缓存过期时间
- 如果用户关闭浏览器并离开,缓存将在设置的时间段后过期,并将释放用户重新登录
- 如果用户试图在缓存过期之前再次登录,则用户必须等待一段时间才能让缓存过期
- 如果用户正确注销,您可以删除注销事件上的缓存项,这样用户就不必等待重新登录
使用这种方法,您还可以节省大量的数据库往返时间来更新/检查用户状态,并且无论托管环境或会话模式如何,这种方法都可以工作。如果发生断电,则不会触发此操作。为什么不?如果客户端断电,会话将正常超时。我假设他们的意思是一般来说,即他们的整个公司,包括服务器。事实上,服务器断电意味着会话端不会正常启动。我不确定会发生什么。恢复计划应该包括这些标志的重置。当我看到它时,我相信它,服务器怎么可能知道浏览器何时关闭?它不知道浏览器何时关闭,但是会话最终将超时,会话结束将被引发/激发。注意:会话结束只会为“InProc”会话激发。如果您想要vb.net答案,为什么要使用
C
和C++
标记?