登录时异地登录提醒

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

以TP框架搭建的网站后台为例,思路如下:
(1)数据库用户表
在user表中,增加一个字段`session_id` varchar(32),用来存放登录之后的session_id。
(2)用户登录

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

[php]  view plain  copy
  1. M('user')->where(array('id'=>$_SESSION['uid']))->save(array('session_id'=>session_id()));  

(3)解决异地登录问题

对于后台操作,为了便于验证和操作安全,基本都会先创建一个基础控制器BaseController,然后后台的其他操作控制器都继承这个基础控制器。对于后台的每一步操作之前,用户状态的检测都放在BaseController控制器的初始化_initialize()方法中。

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

[php]  view plain  copy
  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,给出提醒:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值