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
打造计数器DIY三步曲(上)
Oct 09 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
YII框架批量插入数据的方法
Mar 18 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 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作的文本留言本的例子(六)
2006/10/09 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
可以支持多中格式的JS键盘
2007/05/02 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
react同构实践之实现自己的同构模板
2019/03/13 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
python strip()函数 介绍
2013/05/24 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
共产党员岗位承诺书
2014/05/29 职场文书
好人好事演讲稿
2014/09/01 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2014年民政工作总结
2014/11/26 职场文书
台风停课通知
2015/04/24 职场文书
党员身份证明材料
2015/06/19 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫