PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】


Posted in PHP onMarch 15, 2018

本文实例讲述了PHP实现用户异地登录提醒功能的方法。分享给大家供大家参考,具体如下:

对于安全性要求比较高的web网站,特别是后台管理,有时候需要甄别自己的账号是否被盗或者是否有另一个人此刻登陆了在进行后台操作,这些都会很不安全,为了避免两个人同时登录同时操作,可以强制下线一个账号。

通过IP判断当然是不行的,因为IP是随时会在某一个网段内变化的,但是有一个机制,恰巧可以解决这个,那就是session,只要使用同一个浏览器访问网站,浏览器不关闭每个来访者的session_id是不变的,这也正是解决这个问题需要的。

以TP框架搭建的网站后台为例,思路如下:

(1)数据库用户表

在user表中,增加一个字段`session_id` varchar(32),用来存放登录之后的session_id。

(2)用户登录

用户登录,就是正常的判断账号密码以及验证码,当这些都验证通过的时候,取出当前的session_id存入数据库user表中。

M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));

(3)解决异地登录问题

对于后台操作,为了便于验证和操作安全,基本都会先创建一个基础控制器BaseController,然后后台的其他操作控制器都继承这个基础控制器。对于后台的每一步操作之前,用户状态的检测都放在BaseController控制器的初始化_initialize()方法中。

现在在_initialize()方法中,除了验证用户登录状态是否被锁定等等,还要取出本地session_id和存放在user表中的session_id进行比对,如果对不上那么表名账号在异地有登陆,这时候可以迫使强制下线,退回到登录页面。

$user = M('user')->where(array('id'=>$_SESSION['uid']))->find();
$session_id = session_id();
if($user['session_id'] != $session_id){
 session_destroy();
 $this->error('您的账号在其他地方登录,您已经被强制下线', U('login'));
}

当然也可以获取到异地登陆的IP,给出提醒:

PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php cookis创建实现代码
Mar 16 PHP
PHP 输出缓存详解
Jun 20 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
php数组查找函数总结
Nov 18 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
PHP获取二维数组中某一列的值集合
Dec 25 PHP
CI框架表单验证实例详解
Nov 21 PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 PHP
laravel框架关于搜索功能的实现
Mar 15 #PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 #PHP
PHP实现生成推广海报的方法详解
Mar 14 #PHP
PHP基于phpqrcode类生成二维码的方法详解
Mar 14 #PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 #PHP
Laravel模型事件的实现原理详解
Mar 14 #PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 #PHP
You might like
php自动获取目录下的模板的代码
2010/08/08 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
php微信开发接入
2016/08/27 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
合作意向书格式及范文
2014/03/31 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
党员转正介绍人意见
2015/06/03 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Python 文本滚动播放器的实现代码
2021/04/25 Python
教你怎么用Python生成九宫格照片
2021/05/20 Python
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis