musefan
Я не думаю, что вы можете достичь этого так, как хотите, то есть иметь "зарегистрированные устройства".
Чтобы иметь зарегистрированное устройство, вам понадобится уникальный способ идентификации используемого устройства. Это становится трудным с веб - приложением, потому что у вас нет доступа к достаточному количеству информации об устройстве, чтобы получить уникальный идентификатор-вы можете получить что-то, что является вероятно, достаточно уникальный но, в лучшем случае, ненадежный.
Таким образом, вы можете подумать о создании уникального файла cookie, который идентифицирует машину. Этот файл cookie известен вашему серверному приложению (хранится в БД) и может быть использован для аутентификации всех запросов с этой машины - достаточно просто. Проблема в том, что файлы cookie доступны, изменяемы и могут быть скопированы... так что это не очень хорошее решение. Не говоря уже о том, что они могут быть легко потеряны браузером, и тогда у вас будет боль от необходимости исправить эту проблему для вашего пользователя.
Если бы Вы были счастливы с риском любого из них, то, возможно, вы могли бы что-то сделать. Возьмите всю информацию, которую вы можете получить от клиентской машины, и попытайтесь создать уникальный идентификатор. Что-то вроде предложенного здесь.[^] Затем используйте это, чтобы идентифицировать машину - просто не ожидайте, что она будет безупречной.
Однако мое предложение состояло бы в том, чтобы забыть о том подходе, который вы используете, и вместо этого посмотреть на ограниченное количество одновременных подключений. Это можно легко сделать с помощью любого типа аутентификации на основе токенов...
Каждый раз, когда пользователь входит в систему, вы сохраняете новый токен в своей БД как "действительный" и обязательно аннулируете все остальные предыдущие токены из списка (просто удалите их).
Затем, когда вы получаете запрос для обработки, вы можете проверить маркер аутентификации и убедиться, что он является действительным.