【发布时间】:2011-05-02 07:59:33
【问题描述】:
我的应用程序我不想同时使用相同的用户名登录,所以我有想法但我不确定它是否正确。
1)当用户登录时,更新状态(数据库中用户表中的“isOnLine”列)并将其登录时间保存在会话中,例如:
登录方法内部:
DateTime ltime=Datetime.now();
Dbservice.executeSql(update User set(isOnLine,lastLoginTime) value("1",ltime));
Session["logintime"]=ltime;
当其他用户尝试登录时,查看该用户的状态是否已登录。如果是,请将“isOnline”设置为“0”,然后他就可以登录了。
2)在每个受保护页面的Page_Onload()方法中,检查session中的登录时间是否等于db中的时间:
string logtime=Dbservice.executeSelect("select lastLoginTime from user where xxxxx").Rows[0]["lastLoginTime"];
if(!Session["logintime"]==logtime){
//this user should offline now,redirect it to the login page
}
不知道我的方法对不对?
另外,我必须在每个受保护页面的Page_onLoad方法中编写检查逻辑,所以有很多重复代码,有什么办法可以避免这种情况吗?
因为我们网站中的所有页面都受到保护!
谢谢。
更新:
不允许两个用户同时在线,但允许后面的用户用正确的密码强制前面的用户下线。例如:
user1 使用“username=bill”登录,并且 "password=000",那么他现在在线。
然后 user2 尝试使用 “用户名=账单”和 "password=123",因为他的密码是 无效,所以他的请求被拒绝了。
user3 尝试登录 “用户名=账单”和 "password=000",因为他的密码是 有效,所以他可以选择 user1 离线。
在这种情况下,当后面的用户登录成功,但前面的用户的会话也存在,所以我必须根据会话中的“登录时间”检查它是否在线。
【问题讨论】: