Задать вопрос
@Frapsy

Как лучше хранить временную информацию в Yii2?

У постов есть рейтинг. Поднять рейтинг поста может не только пользователь, но и гость. Необходимо сделать так, чтобы поднять рейтинг можно было только 1 раз в сутки. Если это пользователь, поднятие рейтинга контролируется с помощью БД, но как быть с гостями? Первое, что приходит в голову, это использовать куки, в контроллере делаю так:
if(!Yii::$app->request->isAjax)
    return json_encode(['status'=>'err_3']);

// если гость

if(!isset(Yii::$app->request->cookies['like_' . $id])) { // $id - ид поста
    Yii::$app->response->cookies->add(new \yii\web\Cookie([
        'name'=>'like_' . $id,
        'value'=>1,
        'expire'=>86400,
    ]));
    // повышаем рейтинг и возвращаем 'ok'
}


Проблема заключается в том, что isset(Yii::$app->request->cookies['like_' . $id]) постоянно возвращает false. Где допущена ошибка? Может есть способы более качественно идентифицировать гостя?
  • Вопрос задан
  • 3125 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя Александр Губарев К ответам на вопрос (4)
@AlexGx
Yii2 developer, business analytics
Я бы хранил инфу по гостю в бд (или кеше), возможно формат таблицы бд прийдется расширить (добавить флаг гостя, или в user_id записывать 0 в случае гостя) с привязкой к браузеру и IP, чтобы избежать накрутку. Также дополнительно подстраховался куками. Куки как основное "хранилище" не совсем подходят.
Ответ написан
Комментировать