起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4248|回复: 6

[处理中3] 如果判断在线用户存在,先注销,在重新登录

[复制链接]

68

主题

221

帖子

755

积分

高级会员

Rank: 4

积分
755
QQ
发表于 2018-3-12 19:08:12 | 显示全部楼层 |阅读模式
bex5.2.7版本   

想通过JS端判断一个账户只能登录一次,如果判断在线用户存在,先注销,在重新登录。
var url = justep.Request.convertURL("/UI/system/service/common/queryOnlineUsers.j");
        var xmlHttpRequest = justep.Request.sendHttpRequest(url);
    if (justep.Request.isSuccess(xmlHttpRequest)) {
            var users = justep.Request.getData(xmlHttpRequest.responseXML);
        var rows = users.rows; //代码走到这里就报错 rows= undefined
        for (var i = 0; i < users.rows.length; i++) {
            if (username == rows.name.value) {// 判断当前输入的name是否在在线用户列表中
                var bsessionid = rows.sessionid.value;// 从在线用户列表获取已登录的bsessionid
                var r = confirm("该用户已登录请确认是否退出登录重新登录,若取消请换其他用户登录");
                if (r == true) {
                    // 注销已登录的bsessiondid
                    var url = require.toUrl("$UI/portal/base/logout/logout.j?bsessionid=" + bsessionid);
                    $.ajax({
                        type : "POST",
                        processData : false,
                        url : url,
                        cache : false,
                        async : false
                    });
                } else {
                    return;
                }
            }
        }
    }

参加论坛给的例子,不知道可行不。

68

主题

221

帖子

755

积分

高级会员

Rank: 4

积分
755
QQ
 楼主| 发表于 2018-3-13 17:58:26 | 显示全部楼层
大神都休假了吗?麻烦帮忙看看 谢谢
回复 支持 反对

使用道具 举报

53

主题

928

帖子

1730

积分

金牌会员

Rank: 6Rank: 6

积分
1730
发表于 2018-3-14 11:37:47 | 显示全部楼层
就是  要保证  用户只能在一个地方登陆  是吗?

我给你个思路:(我一直是这样做的,也不知道安全性具体有多高)
你的登录账号  做成至少三个字段   loginID,loginKey,LoginState    至少这三个,(当然如果你还有密码错误次数的要求的话,还要加记录连续错误次数的字段和上一次请求登录的时间)
有这三个字段之后,你登录就是找到loginID 然后验证    前端发送过来的loginKey是否跟你数据库中的loginKey一致,如果一致则登录成功。登录成功的时候   将系统的当前时间的毫秒数(13位的数字)存到loginState字段中去。    然后把loginID和loginState  传给前端  并在前端进行保存。前端有loginID和loginState的用户  表示已经登录的用户。   另外在你每次请求数据的时候   都可以把loginID和loginState带上   每次请求数据都去匹配一次loginID和loginState是否跟数据库中存的一致,如果一致则进行数据库的请求操作,如果不一致说明账号在其他地方登录了      
大概思路就是这样的   
这种方法还可以做   用户的静默登录     就是在用户端存储loginID和loginState      每次进页面的时候 先看有没有这两个参数  有的话 就去数据库匹配一次是否跟数据中存的一致,如果一致则静默登录,如果不一致则要求用户重新登录
大概就这么多了
承接wex5开发web项目、微信页面等;
低费用进行零散功能开发(java、JS、微信各种接口、阿里云接口等)
QQ:459349489
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-3-14 13:47:10 | 显示全部楼层
var users = justep.Request.getData(xmlHttpRequest.responseXML);返回的是xml格式,不能直接获取的
简单的就是定义个data,把users的数据load给data
然后遍历data的数据操作


把数据load给data可以参考/UI/SA/online/mainActivity.js
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

68

主题

221

帖子

755

积分

高级会员

Rank: 4

积分
755
QQ
 楼主| 发表于 2018-3-14 16:09:32 | 显示全部楼层
jishuang 发表于 2018-3-14 13:47
var users = justep.Request.getData(xmlHttpRequest.responseXML);返回的是xml格式,不能直接获取的
简单 ...

主要是我这里没有用到W页面啊,就是js
回复 支持 反对

使用道具 举报

68

主题

221

帖子

755

积分

高级会员

Rank: 4

积分
755
QQ
 楼主| 发表于 2018-3-14 16:10:06 | 显示全部楼层
lqweb 发表于 2018-3-14 16:09
主要是我这里没有用到W页面啊,就是js

不用W页面 有什么办法能获取到在线用户信息吗
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36185
发表于 2018-3-14 16:39:34 | 显示全部楼层
那就需要自己解析xml中的数据,去判断
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-6 18:24 , Processed in 0.055044 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表