İşte bir java uygulaması için tarayıcı sekmeleri arasında oturum kesilmesini önlemek için bir çözüm. Bu IE için çalışacaktır (JSP / Servlet)
- İlk JSP sayfanızda onload olayı, oturumda bir "window.title" ve olay izleyici kurmak için bir sunucu uygulamasını (ajex çağrısı) arayın (ilk kez 0 olarak ayarlanacak bir tamsayı değişkeni)
- Diğer sayfaların hiçbirinin bir pencere ayarlamadığından emin olun.
- Tüm sayfalar (ilk sayfa dahil), sayfa yükleme işlemi tamamlandığında pencere başlığını kontrol etmek için bir java komut dosyası ekler. başlık bulunamazsa geçerli sayfayı / sekmeyi kapatın (bu gerçekleştiğinde "window.unload" işlevini geri aldığınızdan emin olun)
- Sayfa penceresini ayarlayın. Sayfa yenileme olayını yakalamak için java komut dosyası olayını (tüm sayfalar için) yükleyin, bir sayfa yenilendiyse olay izleyiciyi sıfırlamak için sunucu uygulamasını arayın.
1) ilk sayfa 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) tüm sayfalar için ortak 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 - sunucu uygulaması eşleme
<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) Sunucu kodu
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");
}
}