php实现不能同时登陆

warning: 这篇文章距离上次修改已过336天,其中的内容可能已经有所变动。

思路:
1、每个人登录的时候会生成一个随机码(随机码保存在数据库中);
2、客户端cookies不保存用户名,只保存随机码;
3、账号在任何的地方登录时便会执行第一二部,之前的登录就会失效;
4、功能即可实现;
扩展:
5、可以设置网页最后更新的时间,并且超过一定的时间后就过期;
6、随机码要长一点才不会重复,我现在用的64进制32位,这样几乎不可能重复;
7、另外客户端不保存用户名和密码只存存随机码相对来说安全性也要高些;
解析:
1、使用的是mysql,新增Person_yanzheng字段

1371745-20200408135635324-160949199.png1371745-20200408135635324-160949199.png

function GetRandStr($length) {
    $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $len = strlen($str) - 1;
    $randstr = '';
    for ($i = 0; $i < $length; $i++) {
        $num = mt_rand(0, $len);
        $randstr .= $str[$num];
    }
    return $randstr;
}
$number = GetRandStr(6);
echo $number;

文中因为使用的是thinkphp,把代码放到了CommonAction控制器中,IndexAction控制器login方法引用即可。

1371745-20200408135702177-1541350507.png1371745-20200408135702177-1541350507.png

3、action中登陆模块代码,本文以thinkphp为例(登陆模块继承上级CommonAction):

4、CommonAction中代码(yanzheng这个方法是为了验证是否登陆对所有方法都起效果,所有嵌入到这个方法最佳。):

1371745-20200408135743116-1986924263.png1371745-20200408135743116-1986924263.png

5、这样就可以了。

1371745-20200408135805832-950907343.png1371745-20200408135805832-950907343.png

PHP
最后修改于:2023年08月14日 16:29

添加新评论

选择表情