Вы можете использовать куки и хранить GUID внутри этого куки. Если у пользователя нет GUID, дайте ему новый. В противном случае, проверьте GUID в его куки-файле с тем, что в вашей базе данных. Если это один из трех последних назначенных идентификаторов GUID, то он действителен.
Пример:
Пользователь входит в систему, получает GUID A. Очищает куки. Вход снова, получает GUID B. Очищает куки. Вход снова, получает GUID C. Снова очищает куки. Вход снова, получает GUID D. Все действует. Он мог бы даже войти снова с существующим файлом cookie, содержащим GUID B или C, но если он посещает с GUID A, то он, вероятно, разделяет учетную запись. (Или используя четыре или более веб-браузера.)
Пример 2:
Пользователь 1 входит в систему, получает GUID A. Пользователь 2 входит в систему, получает GUID B. Пользователь 3 входит в систему, получает GUID C. Пользователь 4 входит в систему, получает GUID D. В этот момент GUID A станет недействительным, и вы нажмете наш пользователь 1.
Для этого все, что вам нужно, это отслеживать три самых последних GUID, которые вы присвоили пользователю, заменяя самый старый из них новым GUID всякий раз, когда пользователь очистил свой cookie. Если вы проверяете это при каждом веб-запросе, вы фактически блокируете каждого четвертого (и более) пользователя.