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来检测proxy
Oct 09 PHP
php 数组的创建、调用和更新实现代码
Mar 09 PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
使用PHP开发留言板功能
Nov 19 PHP
php的无刷新操作实现方法分析
Feb 28 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
PHP使用者状态管理功能的应用
2006/10/09 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
用客户端js实现带省略号的分页
2013/04/27 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
常用python数据类型转换函数总结
2014/03/11 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
python如何生成各种随机分布图
2018/08/27 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
就业推荐自我鉴定
2013/10/06 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
五好家庭申报材料
2014/12/20 职场文书
青春雷锋观后感
2015/06/10 职场文书
Redis批量生成数据的实现
2022/06/05 Redis
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python