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 页面跳转到另一个页面的多种方法方法总结
Jul 07 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
PHP数组操作简单案例分析
Oct 15 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 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执行.SQL文件
2013/07/05 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
github配置使用指南
2014/11/18 Python
Python实现简单状态框架的方法
2015/03/19 Python
python使用super()出现错误解决办法
2017/08/14 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
企业文化理念标语
2014/06/10 职场文书
主要领导对照检查材料
2014/08/26 职场文书
公务员培的训心得体会
2014/09/01 职场文书
小学运动会入场口号
2015/12/24 职场文书
商业计划书范文
2019/04/24 职场文书
PHP中->和=>的意思
2021/03/31 PHP
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js