请问:7.0 如何限制用户重复登录?
-
想问一下为什么要解决这个“问题”
-
我是希望能了解这个需求的合理性。你能举个例子,怎么样操作会导致很容易出错,而单一用户在线怎样就防止了这种出错。
-
[quote author=tudou link=topic=16434.msg28172#msg28172 date=1402374122]
比方说,公用账号admin,他们同时在不同地方登陆操作相同一条数据,但是对数据的处理不同。A人员将数据置为状态1,B人员将数据置为状态2,这时A先保存数据进入1流程,B在保存时不会再次判断该条数据的状态数据进入2流程,这个时候就会将流程打乱了。
[/quote]
首先你说的这种情况跟是否单个用户登录没有关系,因为不同用户也可能出现同时操作同一个数据记录的情况。
第二,什么是同时?如果确实是有两个数据库的transaction在操作同一条记录,一个transaction是会abort掉的。所以,在同时的情况下也只会有一个transaction能成功更新数据,这是在数据库层面保证的。
另外你说不希望同一用户重复登录。是指:后登录的用户把前一个用户踢掉呢?还是前一个用户没有退出的情况下,后一个用户登不进来?
如果是后者,那我希望既可以在PC机登录,同时也希望我的移动客户端上的APP也能连接到应用服务器,怎么办?
我还是没有看出单一用户单次登录的好处,也没有看到同一用户多次登录的不好的地方,也许还有我没有注意到的情况。 -
[quote author=tudou link=topic=16434.msg28174#msg28174 date=1402381886]
感谢您的回答,您说的有道理。那么如果我只是想要在PC浏览器上,如果用户已登录那么同一个账号,如果登录就给出提示“该用户已在线”,并且不能登录。那么怎么才能检测在线状态呢?什么时候怎么做将用户在线状态置为注销呢?
[/quote]
理论上做是没有啥大问题... 只是意义何在.
一般的B/S架构的在线都是用心跳来玩的.
OE的玩法可以这样. 给用户一个 最后 心跳时间记录. 然后 修改 osv.osv read 方法(估计只要用户动作 都会调用这个方法), 记录用户最后 表示存在感的时间点, 然后 大部分给一个 timeout 时间 做为不在线的标准. 这是一种玩法.
另一种, 同样是给用户最后一个心跳时间 只是 心跳的记录方式 改为 在 OE header 区(用户登陆后的区域) 用 Javascript 设置 定时器, 每几秒发一个 心跳信息给服务器..
同样, 以一个 用户最后心跳时间与 当前时间 的 timeout 时差做不在线的标准 即可.
然后限制登录. 就判断一下 timeout 时差即可. 未超过时差. 就禁止登陆吧....
个人觉得这个没有啥大意义... 别把ERP 软件当行业软件来用....