Сделайте уникальный токен на каждого юзера, и передавайте его клиенту вместо ID. По токену вы сможете определить пользователя, а значит, и права на выполнение действия. Подобрать токен сложнее во много порядков, чем ID. Проблема тем самым снята.
UPD. Вообще, если на сервере включены сессии, то на каждого юзера генерится PHPSESSID, который кладется в cookie. Этот ID - это название файла, который лежит в ФС сервера. В этом файле сериализовано все, что в ходе работы записал туда пых. Т.е. если у пользователя такой куки нет, или она не валидна, то и в сессии для него ничего нет. Соответственно, user_id хранится в сессии, и доступ к ней клиент получает через куку с идентификатором сессии.