ASP.NET убивает сеанс по идентификатору

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

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

Есть ли способ убить конкретный сеанс приложения по идентификатору, заставив пользователя снова войти в систему?

Ответ 1

"Is there a way to Kill an specific Application Session by the ID, forcing user to Log in again?"

Нет. Вы можете получить доступ только к объекту сеанса пользователя, выполняющему текущий запрос (т.е. Самостоятельно), а не к другим объектам сеанса пользователя.

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

Другой альтернативой будет сохранение объектов разрешений для всех зарегистрированных пользователей в статической коллекции, а также в их переменной Session. Таким образом вы сможете изменить объект разрешений без доступа к объекту Session этого пользователя.

Использование статических переменных в веб-приложении, конечно, идет с обычными мерами предосторожности. Поскольку к ним могут обращаться несколько потоков, доступ должен быть синхронизирован. Кроме того, как отметил Алексей Левенков, если у вас несколько серверов, вы должны синхронизировать данные между серверами.

Ответ 2

Вы можете написать Session.Abandon(); или Session.Clear();

или Session.SessionID[int index];

сохранить в нем определенное значение сеанса пользователя, а затем использовать Session.Abandon(); и Session.Clear();

Для убийства определенного сеанса попробуйте использовать Session.Remove("key");

Ответ 3

Чтобы удалить конкретный фрагмент Session, используйте Session.Remove(), например:

Session.Remove("YourKey");

Примечание. Это удаляет значение и ключ из Session, в то время как вы можете видеть, что люди используют Session["YourKey"] = null;, который удалит только значение, но оставьте ключ. Это может быть или не быть тем, что вы хотите, но просто хотели указать на различие.