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

来源:互联网 发布:win10 卸载软件 编辑:程序博客网 时间:2024/06/07 21:21
<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']);    };}
1 0
原创粉丝点击