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

9 篇文章 1 订阅

先说一下流程: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:父级控制器

<?php
namespace app\admin\controller;
use think\Controller;
use think\Request;
use think\Db;

class Base extends Controller
{
	public function _initialize(){   //_initialize框架自带的函数
		if(session('user_name') == null){
			$this->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');
			}
			
		}
	}
}

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值