在我的应用程序中,所有页面都受到保护,因此他们必须登录才能访问这些页面。
系统管理员可以添加用户。
现在有些人告诉我,我必须阻止人们使用相同的帐户同时登录。
这就是说如果有一个名为“John”的用户登录到系统,那么其他人无法再次使用“John”登录他知道密码的事件。
此外,如果一个用户发现某人已登录使用他想要的帐户,他可以让前一个用户离线。如果是这样,我必须判断当前用户是否已经在每个页面中被禁用。这不是一项可以轻松完成的工作。
我想知道这是否必要?
由于我现在发现这么多网站并没有限制这一点,例如,您可以使用同一帐户登录您的gmail / stackoverflow / yahoo并同时在不同的机器上使用。
所以任何人都可以给我一个建议吗?
更新
现在,我们使用asp.net的表单验证,(我们还没有使用成员资格)。在数据库的t_user表中,我们有一个名为“isOnline”和“last_login_time”的列。
当用户登录时,我们将“isOnline”设置为1,并存储登录时间。
当其他用户再次尝试登录时,我们会检查“isOnline”和时间:
if("isOnline"==1 && DateTime.now-LastLogiTIme <40min) // where the 40 min is the form authenaication timeout.
thisAccountHasLogined=true;
但假设用户已登录,然后他清理浏览器cookie,然后如果他刷新页面,他将被重定向到登录页面,但在表单身份验证超时之前他不能再次登录,因为“isOnline” “在db中是1并且从登录到现在的时间跨度并不比表单超时大。
我很困惑。
答案 0 :(得分:1)
在某些情况下,我可以理解没有多次登录,但实际上,我从来没有必要实现它。
不幸的是,我不相信有一种标准机制可以确定用户是否已经登录,这需要通过其他逻辑来完成。在我们的应用程序中,我们使用数据库来存储会话信息并使用它,这将是一个简单的过程,看看用户中是否已存在会话,如果是,则不允许登录。
<强>更新强>
我对此感兴趣并找到了这个;
http://msdn.microsoft.com/en-us/library/system.web.security.membershipusercollection.aspx
和这个
http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.aspx
使用这些,可以使用.IsOnline()
获取此信息但是,这确实假设您使用的是标准的asp.net成员资格
答案 1 :(得分:0)
存储用户名和密码的表添加列状态 当用户在注销更新状态“注销”时尝试将更新状态登录到“在线”时 在登录检查状态期间,如果状态为在线,则终止进程。这可能是实现这一目标的一个方法,希望它能帮到你