После того, как отправлен запрос на попытку смены состояния счетчика голосов (+1 или -1):
1. Проверить последнее действие в серверной сессии: если последнее действие в серверной сессии установка голоса (+1) - тогда в базе не проверяем и ничего не делаем дальше.
2. Иначе, проверяем наличие ip в базе данных
3. если ip отсутствует - прибавить 1-цу к количеству голосов, иначе - ничего не делать
Если нужна возможность УБРАТЬ СВОЙ ГОЛОС - то порядок обратный, с той же логикой:
1. Проверить последнее действие в серверной сессии: если последнее действие в серверной сессии снятие голоса (-1) - тогда в базе не проверяем и ничего не делаем дальше.
2. Иначе, проверяем наличие ip в базе данных
3. если ip присутствует - отнять 1-цу от количества голосов, иначе - ничего не делать