Фундаментальная проблема заключается в том, что сеть условно не имеет состояния - после того, как сервер отправит требуемый контент в браузер, соединение между клиентом и приложением на сервере прекращается до следующего запроса. Теперь мы можем создать иллюзию состояния различными способами, чтобы мы могли идентифицировать пользователя, вошедшего в систему на время сеанса, но на самом деле это означает, что при запросе к серверу мы проверяем информацию, которую мы предоставляется и затем решает , вошел ли пользователь (все еще) в систему.
Это означает, что вы ограничены с точки зрения механизмов обеспечения выполнения требования о выходе из системы - пользователь может забыть и закрыть браузер или перейти к чему-то другому, или браузер может умереть, его сеанс может истечь (потому что продолжительного телефонного звонка), сетевое соединение может прерваться и т. д. и т. д., но единственное, что вы будете знать об этом, - это отсутствие запросов от клиента, а не положительный признак того, что что-то произошло или не произошло.
Результатом этого является то, что «лучшее» - насколько мне известно - что вы можете достичь, это отслеживать сеанс, с которым связан вход в систему, чтобы при выполнении запроса и принятии вами решения независимо от того, вошел ли этот пользователь в систему, вы сравниваете идентификатор сеанса для текущего запроса с идентификатором в последний раз, когда процесс входа в систему происходил в начале сеанса, и, если они различаются, предпринимают соответствующие действия, то есть выходят из текущего пользователя и вынуждают его снова войти в систему. .