php实现单点登陆,一个账号不能同时多处在线

简单方法实现单点登陆

今天在做暑期项目时遇到一个问题,项目是个组队的项目。上面要求不能一个账号多人登陆在线,后面登陆的人要把前面的人顶掉,类似于王者荣耀之类的。一开始准备用框架,但是框架有些复杂,用在这个项目是感觉没有必要,所以采用一个简便的方法。

思路如下:在数据库中加入一个状态属性,这个状态是随机产生的六位数值。把这个数值储存到数据库,之后定义一个全局常量,把这个随机产生的六位数值赋值给这个常量。然后在每个网页加入常量与数据库中状态属性值的比较,如果不同就跳转到登陆界面。在其他地方登陆会产生新的六位数值,这样就和常量不一样,那前面登陆的也就被挤下去了。

1. 创建数据库
我用的是MySQL数据库,创建一个如下的表。
php实现单点登陆,一个账号不能同时多处在线_第1张图片
2. 连接数据库
这里我只是实现简单连接,功能逻辑不完善。

 

3. 简单搭一个登陆界面和主页

//登陆界面


    
    登陆


    
用户名
密 码
---------------------------------------------------------------------------------------- //主页 query($sql1); //$nums = mysqli_fetch_array($result1); //if($nums[0]!=$zhuangtai) { // header("location:userLogin.php"); //} $sql = "select * from tb_emp,tb_dept where tb_emp.Edeptno=tb_dept.Dno"; $result = $conn->query($sql); echo ""; echo ""; echo ""; while ($row = mysqli_fetch_array($result)) { echo ""; echo ""; echo ""; echo ""; } echo ""; echo "
欢迎来到员工管理系统V1.0
工号姓名年龄部门操作1操作2
" . $row['Eno'] . ""; echo "" . $row['Ename'] . ""; echo "" . $row['Eage'] . ""; echo "" . $row['Dname']. ""; echo "修改删除
添加
"; echo "退出"; mysqli_free_result($result); ?>

4. 登陆功能实现

query($sql);
#返回结果集的数量。当返回数量>=1时,表明数据库数据至少有一条满足要求
$nums = mysqli_num_rows($result);
#   2-数据判断
if ($nums > 0) {
    $randStr=str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890');
    $rand=substr($randStr,0,6);
//    echo $rand;
    $sql2 = "update tb_admin set Astate='$rand' where Aname='$username' and Apassword='$password' ";
    $result2 = $conn->query($sql2);

//    echo ZHUANGTAI;
    header("location:empList.php?zhuangtai=$rand");
    $_SESSION["username"] = $username;
} else {
    header("location:userLogin.php");
}

#关闭数据库连接
mysqli_free_result($result);
?>

5. 单点功能实现
要是有其他页面,只要直接引入这个文件名就可以。

query($sql1);
$nums = mysqli_fetch_array($result1);
if($nums[0]!=$zhuangtai) {
    header("location:userLogin.php");
}
?>

注:(这是我的文件格式)
php实现单点登陆,一个账号不能同时多处在线_第2张图片
6. 测试
在IE上登陆
php实现单点登陆,一个账号不能同时多处在线_第3张图片
进入主页
php实现单点登陆,一个账号不能同时多处在线_第4张图片
在谷歌上登陆后,进入主页
php实现单点登陆,一个账号不能同时多处在线_第5张图片
刷新IE浏览器后
php实现单点登陆,一个账号不能同时多处在线_第6张图片
被挤了下来。

以上就简单的实现了单点登陆的功能。
有什么不清楚的和其他问题可以回复我,谢谢。

你可能感兴趣的:(单点登陆,一个账号不能同时在线,后面把前面挤掉,PHP,web,单点登陆)