Я прочесываю сеть для ответов на эту проблему и еще не нашел удовлетворительного решения. Я, наконец, собрал что-то в JavaScript, что-то вроде работы.
//generate a random ID, doesn't really matter how
if(!sessionStorage.tab) {
var max = 99999999;
var min = 10000000;
sessionStorage.tab = Math.floor(Math.random() * (max - min + 1) + min);
}
//set tab_id cookie before leaving page
window.addEventListener('beforeunload', function() {
document.cookie = 'tab_id=' + sessionStorage.tab;
});
HTML5 sessionStorage
не разделяется между вкладками, так что мы можем сохранить уникальный идентификатор вкладки там. Прослушивание события beforeunload
в окне говорит нам, что мы уходим (и загружаем другую страницу). Установив файл cookie, прежде чем мы уйдем, мы добавим наше значение в новый запрос без дополнительной обработки URL-адресов. Чтобы различать вкладки, вам просто нужно проверить $_COOKIE['tab_id']
на сервере и сохранить значения сеансов соответствующим образом.
Обратите внимание, что Firefox ведет себя странно, в этом запуске window.open()
создаст окно, в котором будет размещено sessionStorage
со своим родителем, что даст вам две вкладки с тем же идентификатором. Ручное открытие пустой вкладки, а затем переход на целевой URL даст вам отдельное хранилище. Chrome работает для меня во всех моих тестах.
Я понимаю, что это, вероятно, неправильный ответ или даже «хороший» ответ, но это a ответ.
По вкладке вы подразумеваете вкладку браузера, не так ли? – vitozev
@vitozev yeah :) – lhuber
Это очень похоже на этот вопрос: http://stackoverflow.com/questions/6067009/php-multiple-concurrent-sessions-per-user Здесь вы можете найти свой ответ. –