기타 언어(C, PHP 등)

[php] browser close - session kill (logout)

노루아부지 2019. 8. 23. 22:48

1. php.ini 수정

session.gc_probability = 100
session.gc_divisor = 100
session.gc_maxlifetime = 5

 

5초간 서버에 입력이 없는 session을 100%확률로 kill

확률은 gc_probability / gc_divisor

 

 

2. unload 방식

그냥 unload에 logout기능을 넣으면 새로고침 할 때도 로그아웃이 됨.

 

unload 할 때 아래와 같은 함수 추가

 

function logout_browser_close(){
   if(event.clientY<0){

   // if(event.clientX < 0 && event.clientY < 0) {
      logout();
   }
   else{
      if(document.readyState=="complete"){
         //새로고침
      }
      else if(document.readyState=="loading"){
         //다른 페이지 이동
      }
   }
}

단, event.clientY<0의 조건은 해당 브라우저가 하나도 없을 경우에만 호출이 된다.

즉, 하나의 브라우저에 2개 이상의 창이 떠 있을 때 하나를 닫아도 logout이 되지 않고

하나의 창만 떠 있을 때 닫아야 logout이 된다.

 

3. submit

   3.1 로그인 페이지를 제외한 모든 페이지 직접 접근 차단

   3.2 로그인 페이지에 접근 하면 해당 session 로그아웃 처리 후 로그인 페이지 view

   3.2 로그인 성공하면 main page로 submit

 

4. 

window.onunload = function myunload(){
	if (window.localStorage) {
		// flag the page as behing unloading
		window.localStorage['myUnloadEventFlag']=new Date().getTime();
	}
}

window.onload = function myload(){
	if (window.localStorage) {
		var t0 = Number(window.localStorage['myUnloadEventFlag']);
		if (isNaN(t0)) t0=0;
		var t1=new Date().getTime();
		var duration=t1-t0;
		console.log(t0);
		console.log(t1);
		console.log(duration);
        
		if (duration<2*1000) {
			// less than 10 seconds since the previous Unload event 
			// => it's a browser reload (so cancel the disconnection request)
			console.log("refresh");
		}
		else {
			console.log("new");
		}
	}
} 

 

728x90
loading