易语言异地登录检测

易语言异地登录检测今天在折腾易语言的时候,有一个小想法,准备搞一下登录常用地或者说异地登录检测,于是着手写了一下代码,希望大神斧正。

先说下我的思路:获取最近十次的用户登录地(如江苏省 苏州市,安徽省 宣城市等)->获取当前登录用户的登录地->判断当前登录地最近十次登录地中出现的次数(这里使用到了”寻找重复文本个数”,文末提供代码)->如果出现次数大于八次则判定为正常登录反之异地登录。

这里操作的是”循环发送消息”的mysql数据库,首先从数据库获取指定用户名的最近十次登录地,这里使用的sql语句:SELECT 字段名 FROM `表名` WHERE `uid` = '指定用户名' order by id desc limit 10
通过php执行该SQL语句获取最近十次登录地,并存到易语言的变量。

获取当前登录地的真实IP,并通过IP定位API转换一下,这里使用的API为高德地图提供的免费API接口,使用前需要申请一下KEY(https://lbs.amap.com/),目前该接口免费提供每天300000调用次数以及200/秒并发量上限。

下面上代码(如果你只会照搬,下面代码你是使用不了的,其中需要修改的已经备注出来了):

.版本 2

.程序集 窗口程序集_启动窗口

.子程序 __启动窗口_创建完毕

功能_异地登录检测 (“用户名”)

.子程序 功能_获取IP所在城市, 文本型, 公开, 本命令由【精易网页调试助手】生成,请配合精易模块使用。
.参数 ip, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型
.局部变量 province, 文本型
.局部变量 city, 文本型

局_网址 = “https://restapi.amap.com/v3/ip?ip=” + ip + “&output=json&key=这里是你自己申请的KEY”
局_方式 = 0
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36”)

局_提交协议头 = ADD_协议头.获取协议头数据 ()

局_结果 = 网页_访问 (局_网址, 局_方式, , , , 局_提交协议头, , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果))
province = 文本_取出中间文本 (局_返回, #引号 + “province” + #引号 + “:” + #引号, #引号 + “,”, , )
city = 文本_取出中间文本 (局_返回, #引号 + “city” + #引号 + “:” + #引号, #引号 + “,”, , )
返回 (province + “ ” + city)

.子程序 功能_获取真实IP, 文本型, 公开, 本命令由【精易网页调试助手】生成,请配合精易模块使用。
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型

局_网址 = “https://api.qcclouds.cn/ip/api.php”
局_方式 = 1
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36”)

局_提交协议头 = ADD_协议头.获取协议头数据 ()

局_结果 = 网页_访问 (局_网址, 局_方式, , , , 局_提交协议头, , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果))
返回 (局_返回)

.子程序 功能_异地登录检测, , 公开, 检测当前软件登录地是否为常用登录地
.参数 qq, 文本型
.局部变量 获取当前登录地, 文本型
.局部变量 获取最近登录地, 文本型
.局部变量 检测, 整数型

获取当前登录地 = 功能_获取IP所在城市 (功能_获取真实IP ())
获取最近登录地 = "这里需要你自己写,我是数据库获取的,你可以试试其他的"
检测 = 寻找重复文本个数 (获取最近登录地, 获取当前登录地, )
.判断开始 (检测 < 8)
    信息框 (“异地登录”, #信息图标, “温馨提示”, )
.默认
    信息框 (“正常登录”, #信息图标, “温馨提示”, )
.判断结束

.子程序 寻找重复文本个数, 整数型, 公开, 寻找重复文本个数
.参数 被查找的文本, 文本型
.参数 欲查找的文本, 文本型
.参数 是否区分大小写, 逻辑型, 可空, 假就不区分 真就区分
.局部变量 查找索引, 整数型
.局部变量 找到的个数, 整数型
.局部变量 文本长度, 整数型

是否区分大小写 = 取反 (是否区分大小写)
文本长度 = 取文本长度 (欲查找的文本)
.如果真 (寻找文本 (被查找的文本, 欲查找的文本, , 是否区分大小写) = -1)
    返回 (0)
.如果真结束
查找索引 = 寻找文本 (被查找的文本, 欲查找的文本, , 是否区分大小写)
找到的个数 = 找到的个数 + 1
.判断循环首 (寻找文本 (被查找的文本, 欲查找的文本, 查找索引 + 文本长度, 是否区分大小写) ≠ -1)
    查找索引 = 寻找文本 (被查找的文本, 欲查找的文本, 查找索引 + 文本长度, 是否区分大小写)
    找到的个数 = 找到的个数 + 1
.判断循环尾 ()
返回 (找到的个数)

下面是我测试的截图,所有数据皆为临时生成,最后一张是mysql数据库表:

易语言异地登录检测

易语言异地登录检测

易语言异地登录检测

这个思路不知道正不正确,看上去也挺简单的,希望小白和我共同学习,同时希望大神可以帮我我斧正,十分感谢。


七彩云博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:易语言异地登录检测

您必须 登录 才能发表评论!