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创建动态图像
Oct 09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
php中怎么搜索相关联数组键值及获取之
Oct 17 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
PHP Hash算法:Times33算法代码实例
May 13 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 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&mysql(一)
2006/10/09 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
python如何统计序列中元素
2020/07/31 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
电气工程师岗位职责
2014/01/01 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL