php 登录踢下线,TP5 - 唯一登录在重新请求时踢用户下线

在登录的时候把session_id保存到redis一个数组中

login.php

//登录后获取用户id,如id=1

$uid = 1;

//创建一个唯一id数组作为唯一登录检测,如果没有此redis值就创建一个数组

if(!cache('sessionIds')){

//创建一个数组,将id作为key把session_id作为值存到redis

$sessionIds = [];

$sessionIds[$uid] = session_id();

cache('sessionIds',$sessionIds);

}else{

//找到登录id 对应的session_id值并改变这个值

$sessionIds = cache('sessionIds');

$sessionIds[$uid] = session_id();

cache('sessionIds',$sessionIds);

}

在构造函数中写入检查方法

Index.php

//构造函数中

public function _initialize(){

//用户处于登录状态时

if(session('userinfo')){

//登录状态检测用户是否在其他地方登录

if(!$this->onlyLoginCheck()){

session('userinfo',NULL);

exit('您的账号已在其他设备登录');

}

}

}

//检查唯一登录

protected function onlyLoginCheck(){

$sessionIds = cache('sessionIds');

$id = session('userinfo.us_id');

//存入的session_id和登录的session_id相等则返回true

if($sessionIds[$id] == session_id()){

return true;

}else{

return false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Security中实现限制异地登录用户下线,你可以按照以下步骤进行操作: 1. 创建一个自定义的AuthenticationProvider实现类,用于处理认证逻辑。你可以继承`DaoAuthenticationProvider`类,并重写`additionalAuthenticationChecks`方法。 在这个方法中,你可以获取用户登录信息,并将其与数据库中存储的用户信息进行比较。如果发现用户已经在其他地方登录,则可以抛出一个自定义的异常,表示异地登录。 2. 创建一个自定义的`AuthenticationSuccessHandler`实现类,用于处理用户成功登录后的逻辑。在这个类中,你可以检查当前登录用户是否已经在其他地方登录。如果是,则可以采取相应的措施来掉之前的登录用户。 3. 在Spring Security的配置类中,配置上述的自定义AuthenticationProvider和AuthenticationSuccessHandler。 你可以通过重写`configure`方法来进行配置,例如: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomAuthenticationProvider customAuthenticationProvider; @Autowired private CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(customAuthenticationProvider); } @Override protected void configure(HttpSecurity http) throws Exception { http .formLogin() .successHandler(customAuthenticationSuccessHandler) .and() .logout() .logoutSuccessUrl("/login") .and() .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated(); } } ``` 4. 在自定义的AuthenticationProvider中,你可以使用Spring Security提供的`SessionRegistry`类来获取当前所有活动的用户会话。通过遍历会话列表,你可以找到与当前用户相同的用户,并将其强制下线。 需要注意的是,上述的实现方式是基于Spring Security的Session管理机制。如果你使用了其他的会话管理方式,可能需要相应地修改实现逻辑。此外,为了确保异地登录的准确性,你可能还需要考虑一些边界情况,例如用户主动注销登录和会话过期等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值