다음은 Java 응용 프로그램의 브라우저 탭 간 세션 전단을 방지하는 솔루션입니다. 이것은 IE (JSP / Servlet)에서 작동합니다
- 첫 번째 JSP 페이지에서 onload 이벤트는 서블릿 (ajex 호출)을 호출하여 세션에서 "window.title"및 이벤트 추적기를 설정합니다 (처음으로 0으로 설정되는 정수 변수)
- 다른 페이지가 창을 설정하지 않도록하십시오.
- 첫 페이지를 포함한 모든 페이지는 자바 스크립트를 추가하여 페이지로드가 완료되면 창 제목을 확인합니다. 제목을 찾을 수 없으면 현재 페이지 / 탭을 닫으십시오 (이 경우 "window.unload"기능을 취소하십시오)
- 페이지를 새로 고치려면 페이지 window.onloadload Java 스크립트 이벤트 (모든 페이지에 대해)를 설정하여 페이지 새로 고침 이벤트를 캡처하십시오. 페이지가 새로 고쳐지면 서블릿을 호출하여 이벤트 추적기를 재설정하십시오.
1) 첫 페이지 JS
BODY onload="javascript:initPageLoad()"
function initPageLoad() {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var serverResponse = xmlhttp.responseText;
top.document.title=serverResponse;
}
};
xmlhttp.open("GET", 'data.do', true);
xmlhttp.send();
}
2) 모든 페이지에 대한 공통 JS
window.onunload = function() {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var serverResponse = xmlhttp.responseText;
}
};
xmlhttp.open("GET", 'data.do?reset=true', true);
xmlhttp.send();
}
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
init();
clearInterval(readyStateCheckInterval);
}}, 10);
function init(){
if(document.title==""){
window.onunload=function() {};
window.open('', '_self', ''); window.close();
}
}
3) web.xml-서블릿 매핑
<servlet-mapping>
<servlet-name>myAction</servlet-name>
<url-pattern>/data.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>myAction</servlet-name>
<servlet-class>xx.xxx.MyAction</servlet-class>
</servlet>
4) 서블릿 코드
public class MyAction extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
Integer sessionCount = (Integer) request.getSession().getAttribute(
"sessionCount");
PrintWriter out = response.getWriter();
Boolean reset = Boolean.valueOf(request.getParameter("reset"));
if (reset)
sessionCount = new Integer(0);
else {
if (sessionCount == null || sessionCount == 0) {
out.println("hello Title");
sessionCount = new Integer(0);
}
sessionCount++;
}
request.getSession().setAttribute("sessionCount", sessionCount);
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "private, no-store, no-cache, must- revalidate");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
}
}