2016-06-04 2 views
-1

В моем приложении он не должен позволять пользователю открывать приложение на нескольких вкладках для того же браузера. Мне нужно реализовать это для некоторой цели безопасности. Как я могу это реализовать?Предотвращение открытия пользователем нескольких вкладок для приложения

+4

Как предотвратить более одного экземпляра приложения сделать ваш сайт более безопасным? Кроме того, как уже было сказано ([здесь] (http://stackoverflow.com/questions/557733/how-to-prevent-a-user-from-having-multiple-instances-of-the-same-web -приложение? rq = 1) и [здесь] (http://stackoverflow.com/questions/8252977/prevent-users-from-opening-multiple-instance-of-same-website?rq=1)): это не хорошая идея, и она не является удобной для пользователя. – Terry

ответ

1

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

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

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

0

Проще всего подписаться на уведомление localStorage и затем обновить узел. Поскольку события не отправляются на вкладку обновления, это влияет только на ранее открытые вкладки.

Пример в JQuery:

$(window).on("storage", function(ev) { 
    if (ev.originalEvent.key == "tabsync") { 
     window.close(); // will probably not work if the user opened the tab 
     window.location = "/onetabonlyplease"; 
    } 
}); 

localStorage.setItem("tabsync", Date.now());