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 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
php自动注册登录验证机制实现代码
Dec 20 PHP
php 不使用js实现页面跳转
Feb 11 PHP
php curl 上传文件代码实例
Apr 27 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
Mar 05 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
PHP中串行化用法示例
Nov 16 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
PHP实现与java 通信的插件使用教程
Aug 11 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
一个ftp类(ini.php)
2006/10/09 PHP
php类常量的使用详解
2013/06/08 PHP
yii中widget的用法
2014/12/03 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
react-router JS 控制路由跳转实例
2017/06/15 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
python thread 并发且顺序运行示例
2009/04/09 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
python ChainMap的使用和说明详解
2019/06/11 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
请说出几个常用的异常类
2013/01/08 面试题
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
教师网络培训感言
2014/03/09 职场文书
数学教育专业求职信
2014/07/22 职场文书
委托书怎样写
2014/08/30 职场文书
2014年银行个人工作总结
2014/12/05 职场文书