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 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
php下载文件的代码示例
Jun 29 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
PHP设计模式之解释器模式的深入解析
Jun 13 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
php输出反斜杠的实例方法
Sep 19 PHP
解决laravel查询构造器中的别名问题
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预定义变量使用帮助(带实例)
2013/10/30 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php英文单词统计器
2016/06/23 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python变量不能以数字打头详解
2016/07/06 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
对python修改xml文件的节点值方法详解
2018/12/24 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
浅谈django 重载str 方法
2020/05/19 Python
Python turtle库的画笔控制说明
2020/06/28 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
客服服务心得体会
2013/12/30 职场文书
致100米运动员广播稿
2014/02/14 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL