php锁定记录,防止多人操作

    xiaoxiao2021-03-29  35

    <script type="text/javascript"> //编辑时锁定 function lock() { var controller = "<?= $this->context->id ?>"; var id = "<?= $id?>"; //发送锁定请求 $.getJSON('/admin.php?r=site/lock', {id: id, controller: controller}, function (json) { // console.log(json); }); } lock(); setInterval(lock, 30000); </script> /** * 编辑时锁定(内容、图书编辑时,为了避免多人同时对同一条记录进行操作,记录在编辑时进行锁定) * @param integer $id 记录id * @param string $controller 控制器id */ public function actionLock($id, $controller) { $cache = Yii::$app->cache; $key = 'lock_'.$controller.'_'.$id; $value = ['locked' => time(), 'lockedby' => Yii::$app->session->get('__id')]; if ($cache->set($key, $value, 60)) { $ret = ['state' => true]; } else { $ret = ['state' => false]; } echo json_encode((object)$ret); } public function isLock($id) { $cache = Yii::$app->cache; $key = 'lock_'.$this->id.'_'.$id; $value = $cache->get($key); if ($value && $value['lockedby'] != Yii::$app->session->get('__id')) { Yii::$app->session->setFlash('tips', '<span id="message" style="color:#004eff;display: block;text-indent: 40%;">此条记录已锁定,请稍后再试</span>'); return false ; }else{ return true; } } //锁定后直接跳转,否则,会继续加载页面,重新锁定,锁定无效 public function actionRolelist_update($id) { $model = OrgRole::findOne($id); if (!$this->isLock($id)){ $this->redirect($_SERVER['HTTP_REFERER']); }; }
    转载请注明原文地址: https://ju.6miu.com/read-664936.html

    最新回复(0)