就像QQ那样的,相同的一个QQ账号是不可以同时在不同的地方登陆的。QQ采用的方式是,采用相同账号后登陆的用户将会把先登录的用户“挤掉”。但是我觉得,这样做并不是做好的做法。考虑一种情况,后一个登录的用户是非法的,这样一来,这个非法的用户就把前一个合法的用户“挤掉”了,如果能够实现相同账号始终只能登录一次,在登录状态下,后登陆的用户发出的登录请求被拒绝,那么,只要合法用户始终在线,非法用户就无法对前一个合法的用户产生威胁。但是这种做法似乎也存在一定危险:如果前一个登录者是非法用户呢?合法用户将始终无法正常登录!如果是QQ的话,估计这种做法该丢的东西全都丢了吧。所以,两种做法,我觉得应该是各有裨益,要视情况而定了。
努力了很久以后,还是决定了使用类似QQ的做法,后登录者将会把先登陆者挤掉。很大一部分原因,是因为,还没有想到合适的方法实现拒绝后登陆请求。而将前一个挤掉的做法,似乎比较简单。我只是在数据库中添加了一个标记用户登录状态下的sessionid,每次都判断session id的值有没有变化,如果有变化就说明当前账号在不同的地点或者新的会话中登录了。如果要实现像QQ那样同一账号在同一台机器上登录时提示不能重复登录的话,只要把标记改成是用户机器的IP即可。感觉上还是比较清楚的。
之前我在园子里也提到过这样的问题,有人提示我用application来实现,并给出了实现的C#代码。但是我觉得,这样做并不是很好。如果用户账号一多,临时存储的空间会不会很大呢?如果像我这样在数据库中做的话,无论如何有用户的存在就一定要有一个用户表,在这个表上加上一个字段,影响不是很大,唯一不好的地方就是数据库访问有点过于平凡,由于每次都要判断用户是否从其他地方登陆了,是要有页面请求,就要判断一次。
先就这样实现了,期待以后会有更好的方法来实现这样的功能,或者哪位园子里的朋友路过可以指点我一下,我将感激不尽!