• 售前

  • 售后

热门帖子
入门百科

PHP实现用户异地登录提示功能的方法【基于thinkPHP框架】

[复制链接]
钟情695 显示全部楼层 发表于 2021-10-25 18:30:17 |阅读模式 打印 上一主题 下一主题
本文实例讲述了PHP实现用户异地登录提示功能的方法。分享给各人供各人参考,详细如下:
对于安全性要求比较高的web网站,特殊是后台管理,偶然候需要甄别自己的账号是否被盗或者是否有另一个人此刻登岸了在举行后台操纵,这些都会很不安全,为了避免两个人同时登录同时操纵,可以强制下线一个账号。
通过IP判定当然是不行的,由于IP是随时会在某一个网段内变化的,但是有一个机制,恰巧可以办理这个,那就是session,只要使用同一个浏览器访问网站,浏览器不关闭每个来访者的session_id是不变的,这也正是办理这个问题需要的。
以TP框架搭建的网站后台为例,思绪如下:
(1)数据库用户表
在user表中,增长一个字段
  1. `session_id` varchar(32)
复制代码
,用来存放登录之后的session_id。
(2)用户登录
用户登录,就是正常的判定账号暗码以及验证码,当这些都验证通过的时候,取出当前的session_id存入数据库user表中。
  1. M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));
复制代码
(3)办理异地登录问题
对于后台操纵,为了便于验证和操纵安全,根本都会先创建一个底子控制器BaseController,然后后台的其他操纵控制器都继承这个底子控制器。对于后台的每一步操纵之前,用户状态的检测都放在BaseController控制器的初始化
  1. _initialize()
复制代码
方法中。
如今在
  1. _initialize()
复制代码
方法中,除了验证用户登录状态是否被锁定等等,还要取出本地session_id和存放在user表中的session_id举行比对,假如对不上那么表名账号在异地有登岸,这时候可以迫使强制下线,退回到登录页面。
  1. $user = M('user')->where(array('id'=>$_SESSION['uid']))->find();
  2. $session_id = session_id();
  3. if($user['session_id'] != $session_id){
  4. session_destroy();
  5. $this->error('您的账号在其他地方登录,您已经被强制下线', U('login'));
  6. }
复制代码
当然也可以获取到异地登岸的IP,给出提示:

更多关于thinkPHP相干内容感爱好的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操纵本领总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技能总结》。
希望本文所述对各人基于ThinkPHP框架的PHP程序设计有所资助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作