<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <xp:eventHandler event="onClientLoad" submit="false"> <xp:this.script><![CDATA[ var secondsIamAliveInterval = 5; var tabId = sessionStorage.getItem("tabId"); if (!tabId) { tabId = Math.random(); sessionStorage.setItem("tabId", tabId); } function sendTabIdToServer() { XSP.partialRefreshGet("#{id:browserTabControl}", { params: {'tabId': tabId} }); } sendTabIdToServer(); setInterval(function() { sendTabIdToServer(); }, secondsIamAliveInterval * 1000); ]]></xp:this.script> </xp:eventHandler> <xp:panel id="browserTabControl"> <xp:this.rendered><![CDATA[#{javascript: var secondsIgnoreOtherSession = 7; if (param.tabId) { var userName = session.getEffectiveUserName(); var userData = applicationScope.get(userName); var now = new Date().getTime(); if (userData) { if (userData.tabId !== param.tabId) { if (userData.time + secondsIgnoreOtherSession*1000 > now) { context.redirectToPage("Error.xsp"); } } } applicationScope.put(userName, {tabId : param.tabId, time: now}); } return true }]]></xp:this.rendered> </xp:panel> </xp:view>