v-lukoyanofff
@v-lukoyanofff
full stack dev + Yii 2

Yii 2 как организовать функционал лайков без регистрации?

Есть несколько возможных способов оранизации подобной задачи Yii 2. У каждого есть плюсы и минусы. А хотелось бы чтобы и волки, и овцы....ну вы понимаете )

1) Через сессию в БД
Из плюсов я вижу то, что можно хранить все это дело постоянно и удобно экспортировать. Сделать уже пробовал. Вот моя настройка для компонента session:
'session' => [
            'class' => 'yii\web\DbSession',
            'writeCallback' => function($session){
                return [
                    'user_id' => (isset(Yii::$app->user->id)) ? Yii::$app->user->id : null
                ];
            },
            'db' => 'db',  // the application component ID of the DB connection. Defaults to 'db'.
            'sessionTable' => 'session', // session table name. Defaults to 'session'.
            'timeout' => 0
        ],

Хотел сделать так, чтобы сессия хранилась всегда. Ведь в один прекрасный момент все лайки юзера могут пропасть. Timeout = 0 не помогает. Тогда как сделать?
Из минусов этого подхода я вижу допонительные запросы к базе, что тормозит работу.
2) хранить в файлах.
Безусловно с файлами работать будет быстрее.
Тут та же самая проблема с бесконеным хранением.
Плюс если мы ничего не чистим, то рано или поздно сессия разрастется до больших размеров. Встает вопрос: а стоит ли это использовать? И если стоит, то как?

3) Куки.
Минусом этого подхода вижу то, что нельзя записать в куки массив. А в моей задаче очень удобно хранить идентификатор для лайка в массиве(для уникальности). Кука - это текстовый объект, поэтому придется делать implode & explode каждый раз.
  • Вопрос задан
  • 914 просмотров
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Если не требуется защиты от накрутки лайков. То просто храним их все на клиенте в IndexedDB или websql (если нет IndexedDB) или localstorage (если нет websql).
При лайке чекаем IndexedDB на наличие идентификатора, того что лайкнул юзер. Если его нет, то отправляем запрос на сервер на увеличение числа лайков.

А еще есть такая штука
https://github.com/yathit/ydn-db но если больше ничего на клиенте особенного хранить не собираетесь, то я бы поискал более легковесные альтернативы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы