TP5实现同一个帐号后登录会将先登录的挤下去

先说一下流程:A用A的账号先登录,登录的时候,将用户信息存到session之后,将sessio_id和登录时间存到redis中,B用A的账号登录,同样是将用户信息存到session之后,将sessio_id和登录时间存到redis中,但是这个时候用户A的在redis中的session_id和登录时间已经被改变了,当A再操作页面的时候,会检查session中的session_id和redis中的session_id是不是一样的,如果一样,说明可以正常操作,如果不一样,就会清除session中的session,跳转到登录页面

此致整个流程做完,其实很简单

下面上代码

login.php

$username = $request->param('user_name');
$passqord = md5($request->param('password'));
$res = Db::name('admin')->where(['user_name'=>$username,'password'=>$passqord])->find();
if($res){
	$redis = new \Redis();
	$redis->connect('12.12.12.12',6379);
	$redis->auth('123456');
	session('user_name',$username);
	$session_id = session_id();
	$redis->set("userid".$res['id'],$session_id);
	$redis->set("logintime".$res['id'],time());
	return $this->success('登录成功','/admin');
}else{
	return $this->error('用户名或者密码错误','/login');
}

Base.php:父级控制器

redirect('/login');
		}else{
			$sessionName = session('user_name');
			$res = Db::name('admin')->where(['user_name'=>$sessionName])->find();
			$redis = new \Redis();
			$redis->connect('12.12.12.12',6379);
			$redis->auth('123456');
			$session_userid = $redis->get("userid".$res['id']);
			if($session_userid == session_id()){
				$redis->set("logintime".$res['id'],time());
			}else{
				session('user_name',null);
				$this->redirect('/login');
			}
			
		}
	}
}

 

你可能感兴趣的:(php,TP)