Серверный компонент не должен полагаться на действия пользователя по закрытию браузера (или выходу из приложения). Как вы знаете, клиент никогда не заслуживает доверия. Например, пользователь может использовать диспетчер задач, чтобы просто убить браузер, или происходит сбой питания, и компьютер пользователя просто выключается. Поскольку вы не можете полагаться на то, всегда ли отправляются данные с клиента, вам нужно делать это исключительно на стороне сервера. По этой причине существует понятие обработчиков сеансов, и большинство фреймворков могут подключать дополнительные обработчики сеансов.
Эти обработчики сеансов либо настраивают сеанс после его открытия (например, пользователь входит в приложение), либо сеанс прерывается (например, когда происходит тайм-аут, поскольку пользователь не взаимодействовал с приложением более Х минут).
И чтобы ответить на ваш вопрос: используйте XmlHttpRequest, так как он быстрее.