Как сделать, чтобы на странице мог находиться только 1 юзер?

196
19 июля 2017, 21:06

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

  • писать в базу, а потом проверять перед заходом, что записи в бд нет или она слишком старая;
  • завести в контроллере статическое поле.

Собственно, как лучше сделать или у asp.net есть какие то родные механизмы?

Answer 1

Вообще, лучше писать в базу, грубо говоря заводить токен доступа к вашей странице соответствующему пользователю, с временем жизни в несколько минут и с опциональным механизмом "скользящего устаревания" (Sliding expiration).

При входе на страницу, делаете проверку в БД, если токен есть, бросаете 403. Если нет, то создаете.

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

P.S. Можно писать не только в базу, но в редис, к примеру. Но тут уже вам на усмотрение.

Answer 2

Правильнее писать в базу, причём желательно чтобы у пользователя не оставалось вариантов. Получение "лока" на редактирование базы по кнопочке "Начать редактирование", а сохранить данные можно только по "Сохранить/Отменить и закончить редактирование". Плюс завязаться на закрытие странички и тоже снимать лок. Понятно что всё равно нет гарантии корректного снятия "лока", так что таймаут тоже предусмотреть надо.

READ ALSO
Как тестировать private и protected методы? [дубликат]

Как тестировать private и protected методы? [дубликат]

На данный вопрос уже ответили:

249
Реализация класса c#

Реализация класса c#

Имеется 3 формы, на каждой по Chart

204
Цикличный буфер в фоновом потоке

Цикличный буфер в фоновом потоке

Имеется цикличный буфер, который непрерывно заполняется в фоновом потокеМне необходимо раз в секунду считывать его и обновлять UI интерфейс

204
StrongTypingException при создании модели из Базы Данных

StrongTypingException при создании модели из Базы Данных

Продолжаю мучать EntityСоздаю модель MySQL БД

274