cache = isset(Yii::$app->memcache)?Yii::$app->memcache:Yii::$app->cache; $this->counter = json_encode([0,0,0,0,0,0]); } /** * {@inheritdoc} */ public static function tableName() { return 'reaction_button'; } /** * {@inheritdoc} */ public function rules() { return [ [['id', 'counter', 'type'], 'required'], [['id'], 'integer'], [['counter'], 'string'], [['type'], 'string', 'max' => 32], [['id'], 'unique'], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'counter' => 'Счётчики json', 'type' => 'Метка для разных разделов', ]; } /** * голосовал ли этот клиент * {@inheritdoc} */ public function testq($id, $type) { $key = "rb_$id"."_$type"; $ua = \Yii::$app->request->getUserAgent(); $uip = \Yii::$app->request->getRemoteIP().",".\Yii::$app->request->getUserIP(); $hash = md5( $ua.$uip ); // $this->cache->delete($hash); // $this->cache->delete($key); $data = $this->cache->get($hash) ; if( $data == $key ){ // часто кликает один пользователь включаем троттлинг $this->cache->set($hash, $key, 60*10) ; return true; } $data = $this->cache->get($key) ; if( $data === false ) return false; if( $data == $hash) return true; // повторно голосует return false; } /** * {@inheritdoc} */ public function addlog($id, $type) { $key = "rb_$id"."_$type"; $ua = \Yii::$app->request->getUserAgent(); $uip = \Yii::$app->request->getRemoteIP().",".\Yii::$app->request->getUserIP(); $hash = md5( $ua.$uip ); $this->cache->set($key, $hash, 60*60) ; $this->cache->set($hash, $key, 60) ; } public function getcounter() { return json_decode($this->counter, true); } }