有时候你的网站账号被盗或你在别处登录操作后台时,右下角会弹出提示信息,提醒你的账号异地登录,或者会被强制下线。对于这种安全性要求比较高的web网站,很多后台管理都会做这种功能提醒。

甄别自己的账号是否被盗或者是否有另一个人此刻登陆了在进行后台操作,这些都是很不安全的,为了避免两个人同时登录同时操作,可强制下线一个账号。我们今天就来讲解这个知识点。

当然,通过IP判断是不行的,因为IP是随时会在某一个网段内变化的,不过有一个机制,那就是session,恰巧可以解决这个,只要你使用同一个浏览器访问网站,浏览器不关闭每个来访者的session_id是不变的,这也正是解决这个问题需要的。

以TP5.0框架搭建的网站后台为例;用哪各框架都一样

(1)修改数据库用户表

在user表中,增加一个字段`session_id` varchar(32),用来存放登录之后的session_id。

(2)用户登录

用户登录,就是正常的判断账号密码以及验证码,当这些都验证通过的时候,取出当前的session_id存入数据库user表中。

(3)解决异地登录问题 对于后台操作,为了便于验证和操作安全,基本都会先创建一个公共控制器Common去继承控制器基类,然后后台的其他操作控制器都继承这个公共控制器。对于后台的每一步操作之前,用户状态的检测都放在Common控制器的__construct构造方法中。

现在在__construct构造方法中,除了验证用户登录状态是否被锁定等等,还要取出本地session_id和存放在admin表中的session_id进行比对,如果对不上那么表名账号在异地有登陆,这时候可以迫使强制下线,退回到登录页面。代码如下:

$user=Db::name('admin')->where('id',session('admin_id'))->find();
$session_id = session_id();
if($user['session_id'] != $session_id){session_destroy();$this->error('登录异常,被迫下线', 'Login/index');
}

效果如下:

Login.php核心代码,isGet就显示登录页面,不是就进行登录处理操作。

class Login extends Common
{public $is_check_login = false;public function index(){if($this->request->isGet()){return $this->fetch();}//调用自定义的方法实现登录$model = model('Admin');$result = $model->login();if($result === false){$this->error($model->getError());}}
}

Admin.php,主要是处理上面login的逻辑与处理方法。校验等,不返回false就存入session_id

Common.php公共控制器文件,login继承公共方法,也就是中间件。意味着登录之前优先通过公共方法,此处接收session_id与存在表里的session_id是否一致,不一致就提醒异地登录,强制下线!

public $is_check_login=true;
public $request;
public function __contruct(Request $req)
{parent::__contruct();$this->request =$req;if(!session('admin_id') && $this->is_check_login){$this->error("先去登录",'Login/index');}if(session('admin_id') && $this->is_check_login){$user = "select...." //查找存在表里的session_id,然后作比较if(session('admin_id') != $user['session_id']){session_destroy();$this->error("登录异常,被迫下线");}}
}

整个过程思路实现起来很简单!其实就是在讲sesson_id的一个用法!

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​docs.qq.com

或 者关注咱们下面的知乎专栏

PHP架构师圈子​zhuanlan.zhihu.com

php实现第三方邮箱登录_PHP实现用户异地登录提醒功能的方法相关推荐

  1. 新增公告提示功能,支持用户异地登录提醒和授权过期通知,JumpServer堡垒机v2.15.0发布

    11月1日,JumpServer开源堡垒机正式发布v2.15.0版本.在这一版本中,JumpServer新增公告提示功能,管理员可以根据不同的场景向所有用户实时发布重要通知:用户登录方面,新版本支持用 ...

  2. 计算机调试致sa登录失败,无法打开登录 'xxxx' 中请求的数据库。登录失败。用户 'sa' 登录失败。解决思路...

    当前位置:我的异常网» Sql Server » 无法打开登录 'xxxx' 中请求的数据库.登录失败.用 无法打开登录 'xxxx' 中请求的数据库.登录失败.用户 'sa' 登录失败.解决思路 w ...

  3. php做异地登录验证,PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】

    本文实例讲述了PHP实现用户异地登录提醒功能的方法.分享给大家供大家参考,具体如下: 对于安全性要求比较高的web网站,特别是后台管理,有时候需要甄别自己的账号是否被盗或者是否有另一个人此刻登陆了在进 ...

  4. 无法打开登录所请求的数据库 xxx。登录失败。用户 'AAA' 登录失败。

    无法打开登录所请求的数据库 "xxx".登录失败.用户 'AAA' 登录失败. 比如,原来在你本地数据库中有一个用户名是AAA,这个数据库是远程数据库在本地的备份,当然远程数据库中 ...

  5. sql无法打开用户默认数据库,登录失败,用户‘sa’登录失败,错误:4064的解决方法

            sql无法打开用户默认数据库,登录失败,用户'sa'登录失败,错误:4064的解决方法 无法打开用户默认数据库,登录失败,这是因为登录帐户的默认数据库被删除. 解决方案:用window ...

  6. thinkphp限制单点用户登录_php的sso单点登录实现方法

    本文实例讲述了php的sso单点登录实现方法.分享给大家供大家参考.具体分析如下: 这里详细讲到了几点: 1.点击登录跳转到SSO登录页面并带上当前应用的callback地址 2.登录成功后生成COO ...

  7. Django项目实战——6—(退出登录、判断用户是否登录、QQ登录、QQ登录工具QQLoginTool、本机绑定域名)

    1.退出登录 注册界面跳转到登陆界面:templates/register.html 前端注册界面 {# 跳转到登陆界面 #}<a href="{% url 'users:login' ...

  8. 在linux设置Mysql允许用户远程登录和限制用户远程登录

    允许用户远程登录: use mysql;update user set host = '%' where user = 'root';select host, user from user;flush ...

  9. 无法打开用户默认数据库,登录失败,用户‘sa’登录失败,错误:4064的解决方法...

    无法打开用户默认数据库,登录失败,这是因为登录帐户的默认数据库被删除. 解决方案:用windows身份模式进入,选择"安全性"---"登录名"------&qu ...

最新文章

  1. 【转】Spring mvc 统一异常处理和静态文件的配置
  2. python 使用sort()函数和正则表达式(lambda)对os.listdir()获取的文件夹文件列表进行重新排序 乱序排序
  3. boost::mp11::mp_map_update_q相关用法的测试程序
  4. Python自动化开发学习22-Django下(Form)
  5. XCode6.0的iOS免证书真机测试方法(MAC及黑苹果均有效)
  6. Objective-c:NSString的常用方法
  7. MFC连接MySQL数据库实例
  8. 三维空间中鼠标点击选择线段的方法
  9. my opencv voyage
  10. 认知SaaS产品和MVP流程
  11. 开发届这些公司的自白
  12. 2023山东智慧养老展/中国适老科技展/智能看护设备展
  13. 公共厕所女性如厕难,厕所革命刻不容缓
  14. 国内常见的一些代码托管平台
  15. python和c语言哪个效率高_Python运行效率优于C语言的功能简介
  16. 2021.5.10(cf)
  17. WPF 使用Quartz MS字体
  18. CUMTOJ算法作业二
  19. Mac下chromedriver下载及安装详解
  20. Stata常用命令示例

热门文章

  1. CALL SYMPUT与CALL SYMPUTX区别
  2. mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)
  3. ubuntu+eclipse+svn
  4. 大数相加c语言思路,大数相加
  5. 三相同步电机怎么接线图_三相电度表怎么看倍数
  6. 机制 linux_从一道面试题谈linux下fork的运行机制
  7. php curl ajax get请求,PHP的curl的get,post请求-Fun言
  8. 中断按键c语言程序设计,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
  9. matlab三维选取二维,基于Matlab绘制二维和三维图形以及其他图形控制函数的使用方法...
  10. 20151208_使用windows2012配置weblogic节点管理器