"Помните Меня На Этом Компьютере" - Как Это Должно Работать?

глядя на куки Gmail, легко увидеть, что хранится в файле cookie "Запомнить меня". Имя пользователя / one-time-access-token. Это может быть реализовано по-разному в случаях, когда имя пользователя является секретным. Но все равно... дело не в очень высокой безопасности: вы крадете печенье, и вы готовы идти.

мой вопрос находится на функциональной стороне, однако: когда вы стираете свои маркеры доступа? Если пользователь входит в без нажать "Запомнить меня" на другом машина, если она аннулирует их маркеры доступа на все машины? Я спрашиваю о том, как это традиционно реализуется, а также как это должно быть реализовано.

6 ответов


Я регулярно использую 2 или 3 машины одновременно, и у меня есть" Запомнить меня " на всех из них. Если один из них отключил другие, это было бы очень раздражающе, поэтому я бы не рекомендовал его.

традиционно он будет использовать тайм-аут, cookie истекает через определенный промежуток времени (или когда пользователь выходит из системы).

все зависит от вашей модели безопасности. Если вы пишете внутреннее приложение компании, где вы ожидаете, что только один пользователь будет на одном компьютере, то возможно, вы захотите иметь более жесткие ограничения, чем gmail.

кроме того, имейте в виду возможность отказа в обслуживании - если действие на одной машине может заставить другую машину быть непригодной для использования, это может быть использовано для предотвращения законного пользователя от возврата контроля в определенных сценариях.



вход в систему с другого компьютера не должен аннулировать вход, связанный с файлом cookie на другом компьютере. Однако если пользователи logsout или "не вы? войти сюда " это должно очистить файл cookie, над которым работает пользователь.

кстати, кража cookie может быть затруднена, настаивая на https и делая это не для сценариев.

добавив"; HttpOnly" в out put вашего cookie, это сделает файл cookie недоступным для javascript например,

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
Set-Cookie: ASP.NET_SessionId=ig2fac55; path=/; HttpOnly
X-AspNet-Version: 2.0.50727
Set-Cookie: user=t=bfabf0b1c1133a822; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Tue, 26 Aug 2008 10:51:08 GMT
Content-Length: 2838

вы можете прочитать больше об этом


файл cookie remember me также должен идентифицировать машину. Это должно быть связано с машиной, потому что есть места, где вы хотите, чтобы вас запомнили, и другие места, где вы этого не делаете (дом против работы).

срок действия обычно устанавливается на разумный период (две недели) или после того, как пользователь явно вышел из системы,


Что я бы сделал, это связать каждый сеанс с IP-адресом. Если токен сеанса отправляется с другого IP-адреса, чем у вас для этого, отклоните его.


маркеры доступа должны быть специфичными для IP, чтобы они не могли легко передаваться между машинами.

Они также должны быть реализованы таким образом, чтобы пользователи могли видеть, на каких машинах у них есть активные токены.

сайты, которые решили убить токен, как только новый будет создан на другом компьютере - сделайте выбор, что их пользователи не будут получать доступ к своей службе на нескольких компьютерах - или если они это сделают - что их использование оправдывает их вход в систему снова.

политика, которую вы используете, действительно зависит от данных, которые вы держите, и потребностей пользователя.