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中获取变量的变量名的一段代码的bug分析
Jul 07 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
PHP实现的mysql读写分离操作示例
May 22 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 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
解决GD中文乱码问题
2007/02/14 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
PHP实现图片旋转效果实例代码
2014/10/01 PHP
php实现的验证码文件类实例
2015/06/18 PHP
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
vue component组件使用方法详解
2017/07/14 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
Python求解平方根的方法
2015/03/11 Python
python 写的一个爬虫程序源码
2016/02/28 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
如何使用python操作vmware
2019/07/27 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
Eclipse面试题
2014/03/22 面试题
舞蹈教育学专业推荐信
2013/11/27 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
工作证明格式及范本
2014/09/12 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS