Стратегия: разблокировать документ, когда пользователь покидает страницу - PullRequest
0 голосов
/ 10 января 2010

Текущее приложение, которое я создаю, - это приложение для совместной работы, которое объединяет нескольких пользователей в «команду» или компанию, которые могут получить доступ к ряду проектов. Каждый проект имеет свои собственные документы.

Я хочу защитить пользователей группы от столкновения друг с другом, и поэтому я создал систему, в которой документы блокируются первым пользователем, который получит к ним доступ. Затем документ разблокируется, когда происходит одно из следующих действий:

  • Пользователь закрывает документ
  • Пользователь выходит из системы и уничтожает его / ее сеанс
  • Пользователь ушел без выхода, но сборщик мусора сеанса разблокирует документ

Все это работает хорошо, но одно остается исправить ...

Мне нужно знать, когда пользователь покидает проект, не разблокируя документ (в основном просто покидая страницу), поскольку он может перейти к другому проекту и отредактировать другой документ.

Единственный вариант, о котором я до сих пор думал, - это перехватить ссылку http в моем базовом классе контроллера (CodeIgniter MVC) и выполнить поиск по URL, чтобы определить, соответствует ли он проекту ... Затем разблокируйте документ. *

Хотя это не слишком хороший вариант, поскольку переменная реферера http непредсказуема.

Что бы вы сделали? (Один и тот же пользователь, находящийся в одном и том же документе в двух окнах, является проблемой, которую можно игнорировать)

Ответы [ 2 ]

1 голос
/ 10 января 2010

Обходным путем было бы использование события window.onUnload Javascript, чтобы сообщить серверу о том, что страница оставлена. Лучше всего использовать AJAX на текущей странице для связи, так как большинство браузеров в наши дни блокируют всплывающие окна.

1 голос
/ 10 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...