这篇文章主要介绍了PHP实现用户异地登录提醒功能的方法,基于thinkPHP框架结合用户session实现异地登陆的判定功能,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了PHP实现用户异地登录提醒功能的方法。分享给大家供大家参考,具体如下:

对于安全性要求比较高的web网站,特别是后台管理,有时候需要甄别自己的账号是否被盗或者是否有另一个人此刻登陆了在进行后台操作,这些都会很不安全,为了避免两个人同时登录同时操作,可以强制下线一个账号。

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

以TP框架搭建的网站后台为例,思路如下:

(1)数据库用户表

在user表中,增加一个字段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控制器的初始化_initialize()方法中。

现在在_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. }

更多相关文章

  1. 0318作业
  2. Android第三方登录-----微信登录接入方法
  3. Android(安卓)登录界面调用输入法时让界面自动上移,使输入法不会
  4. Eclipse开发简易的Android服务器
  5. Android中点击按钮后隐藏输入法
  6. Android仿照淘宝,京东,当当购物平台
  7. 简单留言板练习
  8. 模态框案例
  9. android WebView登录状态session id 和cookie同步

随机推荐

  1. Android初级教程理论知识(第二章布局&读写
  2. 07.Android之Bluetooth
  3. Android中常用布局属性
  4. Android异步处理一:使用Thread+Handler实
  5. Android(安卓)Translucent System Bar 的
  6. android:autoLink和Linkify
  7. Android(安卓)自定义UI圆角按钮
  8. View 控件EditText属性
  9. Say Hello To Android
  10. 在模拟器上运行编译好的android