<?php /** * 加锁(使用Memcached实现) * 备注:加锁结果只有两种情况:加锁成功或加锁失败,而加锁失败的原因只有一个,就是重复加锁。 * * @param string $key 锁标识 * @param int $expiration 锁有效时间,单位:秒 * @return bool 加锁结果:true=加锁成功|false=加锁失败 */ function lock($key, $expiration = 10) { $memcached = new Memcached(); $memcached->addServer('localhost', 11211); return $memcached->add($key, 'A', $expiration); } /** * 解锁(使用Memcached实现) * * @param string $key 锁标识 * @return bool 加锁结果:true=解锁成功|false=解锁失败 */ function unlock($key) { $memcached = new Memcached(); $memcached->addServer('localhost', 11211); return $memcached->delete($key); } $key = 'LOGIN_LOCK_UID_9527'; // 对9527用户进行登录锁定,防止重复登录 $isLock = lock($key, 10); if ($isLock) { // 加锁成功,可以开始执行业务逻辑 echo '用户已被锁定,10秒内禁止登录'; // 检查账号密码合法性,若不合法那么向前端返回错误信息前记得要先解锁 // TODO... // 更新用户最后登录时间、登录IP // TODO... // 登录逻辑完成,可以执行解锁操作 // unlock($key); } else { // 加锁失败(原因:重复加锁) // 这里可以直接返回“请勿重复操作”或“您操作太频繁”等错误信息 // TODO... echo '用户暂时无法登录,请稍后再试'; }
Copyright © 2024 码农人生. All Rights Reserved