Поскольку вы уже перечислили ip в своем вопросе, да, именно так они, скорее всего, и делают.
Это так же просто, как сохранить последний использованный REMOTE_ADDR в таблице базы данных иассоциируя случайный ?i=123456
id с ним.Он не отличается от вашего обычного счетчика пользователя.
$ip = $_SERVER["REMOTE_ADDR"];
$userid = db("SELECT userid FROM userids WHERE ip=?", $ip)->userid;
if (!$userid) {
db("INSERT INTO userids (ip, userid) VALUES (?,?)", $ip, 0);
# and then select it again...
}