php js登录,php+js实现单点登录

php+js实现单点登录

2020年08月14日 00:45:23阅读数:110

登录信息表

DROP TABLE IF EXISTS `fly_admin_login_info`;

CREATE TABLE `fly_admin_login_info` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`admin_id` int(11) unsigned DEFAULT NULL,

`email` varchar(80) DEFAULT NULL,

`create_time` int(11) unsigned DEFAULT NULL,

`update_time` int(11) unsigned DEFAULT NULL,

`is_login` tinyint(4) unsigned DEFAULT NULL COMMENT '1-已登陆,2-未登录',

`login_time` int(11) unsigned DEFAULT NULL COMMENT '登录时间',

`session_id` varchar(150) DEFAULT NULL COMMENT '登录session_id',

`login_ip` varchar(30) DEFAULT NULL COMMENT '登录IP',

`os` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;

// 记录登录信息

$login_info_data = [

"session_id" => $admin["session_id"],

"login_time" => $admin["login_time"],

"is_login"   => 1,

"email"      => $admin["email"],

"os"         => Request::param("os"),

"login_ip"   => Request::ip(),

];

if (Db::table('fly_admin_login_info')->where(["admin_id" => $admin["id"]])->find())

{

$login_info_data["update_time"] =  $admin["login_time"];

Db::table('fly_admin_login_info')->where(["admin_id" => $admin["id"]])->update($login_info_data);

}

else

{

$login_info_data["create_time"] =  $admin["login_time"];

$login_info_data["admin_id"]    =  $admin["id"];

Db::table('fly_admin_login_info')->insert($login_info_data);

}

/**

*  检测是否当前登录是否有效 建议独立封装配合中间件使用

*

*/

public function is_login_validity(Request $request)

{

$adminLogin = session('adminLogin');

if (empty($adminLogin))

{

echo json_encode(["status" => false, "info" => "登录失效,请重新登录!", "url" => url('admin/Index/login')]); exit();

}

else

{

$login_info = Db::table('fly_admin_login_info')->where(["admin_id" => $adminLogin["id"]])->find();

if (isset($adminLogin["session_id"]))

{

if ($login_info["session_id"] === $adminLogin["session_id"])

{

echo json_encode(["status" => true]);

}

else

{

session('adminLogin', null);

echo json_encode(["status" => false, "info" => "您的账号在IP:". $login_info["login_ip"] . "登录,如果不是您本人登录,则您的密码可能已经泄露,请及时修改密码 !", "url" => url('admin/Index/login')]); exit();

}

}

else

{

// 兼容从前

// 记录登录信息

$login_info_data = [

"session_id" => $adminLogin["session_id"],

"login_time" => $adminLogin["login_time"],

"is_login"   => 1,

"email"      => $adminLogin["email"],

"login_ip"   => Request::ip(),

];

if (Db::table('fly_admin_login_info')->where(["admin_id" => $adminLogin["id"]])->find())

{

$login_info_data["update_time"] =  $adminLogin["login_time"];

Db::table('fly_admin_login_info')->where(["admin_id" => $adminLogin["id"]])->update($login_info_data);

}

else

{

$login_info_data["create_time"] =  $adminLogin["login_time"];

$login_info_data["admin_id"]    =  $adminLogin["id"];

Db::table('fly_admin_login_info')->insert($login_info_data);

}

echo json_encode(["status" => true]);

}

}

}

js 一直跑 该环境属于iframe环境

var is_login_validity_msg = null;

xadmin.admin_login = setInterval(function(){

$.post("is_login_validity",{token:"token_@$%!"},function(res){

if (res.status === false)

{

if (!parent.is_login_validity_msg)

{

parent.is_login_validity_msg = res.info;

}

res.info = parent.is_login_validity_msg ? parent.is_login_validity_msg : res.info;

clearInterval(xadmin.admin_login);

layer.msg(res.info, {icon: 5, time: 1000*60*2}, function()

{

parent.location.reload();

window.location.href = res.url;

});

}

},'json');

},3000);

---------------------

本文著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请注明出处。

来源地址:https://www.php.cn/blog/detail/23691.html

来源:php中文网(www.php.cn)

© 版权声明:转载请附上博文链接!

全部评论

文明上网理性发言,请遵守新闻评论服务协议0条评论

47d507a036d4dd65488c445c0974b649.png

立即提交

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android jni java调用c,Android与JNI(一) ---- Java调用C 静态调用

第一、通过eclipse新建一个工程名为HelloJni的android工程,并编译。第二、右键工程-->Android Tools --> Add Native Support,出现如下界面,名字默认就可以了,点击finish。第三、我们在MainActivity类中加入要调用的native代码public n…

c语言程序综合实习学生成绩,C语言程序设计综合实习报告

课题一:用指针优化学生成绩排名一、目的1.熟悉变量的指针和指向变量的的指针变量的概念和使用2.熟悉数组的指针和指向数组的的指针变量的概念和使用3. 掌握冒泡法或选择法排序的算法4. 掌握函数的定义、调用、声明,以及参数的两种…

c语言求最多啤酒数,C语言,算法、动态规划:有一个箱子的容量为v(正整数,0=v=20000),同时有n个物品(0n=30),...

满意答案24k纯真爱l2013.11.07采纳率:42% 等级:12已帮助:9552人#include#define N 30int xiangzi(int n ,int V ,int a[]) //楼主后面的Vo数组必须放进递归函数里面或定义成全局数组 另外h[n]什么情况??{int minv,t,mV;if(n0){if(a[n]&l…

c语言休眠函数useconds类型,带你了解C语言中的Sleep函数(附代码)

Sleep函数:功 能: 执行挂起一段时间用 法:unsigned sleep(unsigned seconds);注意:在VC中使用带上头文件#include ,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include 在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写&…

android 环绕布局,Android自定义View实现圆形环绕效果

之前项目中需要实现一个四周环绕中心圆形头像的效果,感觉还是自定义比较方便,于是就自己封装了一个控件去实现。先贴张图显示最终效果。首先自定义一个View继承自LinearLayout,通过动态添加childView的方式将子控件添加到View中。思路是先添加中间圆形头…

android 高德地图 sh1,百度、高德地图获取发布版(Release)SHA1

一、简介:在百度、高德地图开发中,申请key的时候,要两个版本的sha1值。一个是开发版(debug),一个是发布版(release)。debug版本的sha1比较好获取,网上资料一堆,这里引用一下,就不再重复写了。最…

html前台检验特殊字符正则,【Qt编程】html特殊字符及正则表达式

1、html特殊字符的显示我们知道html语言和C语言一样也有一些特殊字符,它们是不能正常显示的,必须经过转义,在网上可以查到如何显示这些字符,如下图所示:上图给了最常用的特殊字符的显示,下面我们来实验一下…

html 变量类型强制转换,html、js前台数据传到后台,spring复杂类型转换

html、js前台数据传到后台,spring复杂类型转换如果我有两个变量,变量名不一样,处理的规则也不一样,但是他们都是Date.class 类型, 这可怎么破。比如:InitBinderpublic void bindingPreparation(WebDataBind…

html盒模型中border的写法,HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手...

很多小伙伴在前端学习的时候,发现盒子模型默认为正方形。如何把盒子变成想要的模型呢? 首先我们来看一下默认的情况----.box{width: 100px;height: 100px;background-color: rgb(116, 51, 51);box-shadow:0 10px 10px red;text-align: center;position:a…

希捷银河声音大_每日观影之银河守门员( )

#银河守门员Вратарь Галактики#真心不错的科幻大片…尤其这剧情故事实在是俄国电影的一个很有突破性的亮点…基本可以说全方面凸显了俄罗斯的国情…比如高大上的部分完全不输欧美甚至有所超越领先都是要拯救世界而且还很壮烈拼搏的样子…然而百姓生活却显得很窘…

bat循环执行带参数_wxappUnpacker的bingo.bat脚本逐行解读

点击上方“蓝字”关注我们之前发过一篇文章小程序反编译工具在windows系统下的调用脚本提到了Windows平台下的脚本,但是对脚本没有做详细说明。本文就是针对脚本做的讲解。对批处理感兴趣的可以了解下。不会基础也没关系。下面我们进入正题。脚本解读第1行&#xff…

定值保险计算举例_保险公司的“开门红”又要来了!理财险真的值得买吗?

临近年末,各家保险公司都开始备战2020年的“开门红”。对于保险公司来说,“开门红全年红”,只要开门红的任务完成得好,那么今年大半年的保费就不用担心了,因此保险公司们对于这一战都十分重视。如果说“双11”、“双12…

html中post语句,html中post乱码的解决方法

html中post乱码的解决方法发布时间:2021-05-27 11:29:00来源:亿速云阅读:91作者:小新这篇文章主要介绍html中post乱码的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要…

泸州田家炳中学2021高考成绩查询,2021年泸州中考线出来了吗

中考是人们升高中的必经之路,它虽然没有高考那样振奋人心,但是对于当时的人来说也算是一场最正规的考试。首先,不可否认的是中考是很重要的。虽然它不能对高考有着直接影响,但是却有着间接影响。在每年的六份左右出来。中考是很重…

django返回指定html文件,Django返回HTML文件的实现方法

前面我们简单的了解Django的一些工作原理,其中关于页面展示的内容,也全部都是视图(Views)返回的内容,那么我们也知道前端包括很多内容。如:HTML,CSS,JavaScript等以及各种插件,才具备完全的页面…

计算机网络纠错码,计算机网络:纠错

本文概述当数据从发送方发送到接收方时, 纠错码用于检测和纠正错误。纠错可以通过两种方式处理:向后纠错:发现错误后, 接收方会请求发送方重新传输整个数据单元。前向纠错:在这种情况下, 接收器使用纠错码自动纠正错误。单个附加位可以检测到…

扭矩大好还是马力大好_翡翠手镯圈口到底是买大好,还是买小好?行家告诉你...

现在的女性多数人都喜欢购买翡翠手镯、翡翠手链、翡翠戒面等,尤其对翡翠手镯不仅能表现出女性的知性优美,还对身体有一定的好处。翡翠手镯是翡翠价值中除了翡翠戒面外最高的二等翡翠。因为翡翠手镯除了那种开口式的镶嵌翡翠手镯其他的都是闭口的&#xf…

启动失败代码2_菲斯曼燃气壁挂炉故障代码大全及解决方法

菲斯曼燃气壁挂炉型号菲斯曼燃气壁挂炉故障代码大全及解决方法以:06故障代码:系统压力过低。设备的反映: 燃气器锁定。措施:检查系统水压,必要时补充加注供暖水。 0A故障代码:燃气压力过低。设备的反映: 燃气器锁定。措…

用html5交换两个变量的值,Python判断两个对象相等的原理 python交换两个变量的值为什么不用中间变量...

python语言设计一个类代表花,其中含2个对象属性,2class flower: def __init__ (self, name, shape): self.name name self.shape shape def showname (self): print(self.name) def showshape(self): print(self.shape)if __name__ __main__: f1flower("baihe",&q…

3不能安装库_不锈钢水槽如何安装?3个细节要注意,不能忽视,别被套路了

不锈钢水槽如何安装?3个细节要注意,不能忽视,别被套路了随着时代不断的进步。人们生活水平也是不断的提高。生活用品有时间来选,慢慢的步入了我们的日常中。你们觉得家中最重要的地方是什么呢?其实就是厨房&#xff0c…