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
php xml文件操作实现代码(二)
Mar 20 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
php中动态修改ini配置
Oct 14 PHP
PHP安全上传图片的方法
Mar 21 PHP
PHP常用技巧汇总
Mar 04 PHP
PHP程序员的技术成长规划
Mar 25 PHP
php查询操作实现投票功能
May 09 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
cache_lite试用
2007/02/14 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
总经理办公室主任岗位职责
2013/11/12 职场文书
入学申请自荐信范文
2014/02/26 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
五水共治一句话承诺
2014/05/30 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js