카테고리 없음
자바스크립트 세션타임아웃 만들기(워커 사용)
딸기버블티
2022. 9. 23. 17:48
자바스크립트 만으로도 세션타임아웃을 만들 수는 있지만,
다른 탭에 갈 경우는 타이머가 잘 작동하지 않을 수 있다. (브라우저 정책)
이건 worker 라는 것을 통해서 해결할 수 있다.
타임아웃 해주는 자바스크립트 파일과 워커 파일 두 가지가 필요하다.
<타이머를 표시해주는 자바스크립트 파일>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
let worker = new Worker("워커 파일 경로");
function doTimer(){
if (window.Worker) {
// Worker 쓰레드를 생성(js파일를 로드)
worker = new Worker("워커 파일 경로");
var sessionTimeout = $("#sessionTimeOut").val();
worker.postMessage(sessionTimeout);
worker.onerror = (e)=>{
console.log("error " + e.message);
}
// anyone_worker.js에서 postMessage의 값을 받는다.
worker.onmessage = (e)=>{
var date = new Date(null);
date.setSeconds(e.data);
$(".sessionTimer").html(date.toISOString().substr(11,8));
if(e.data.toString() == "0"){
sessionTimeOut().then(function(data){
alertMessage(messageType.type.E, "일정 시간 사용하지 않아 자동 로그아웃합니다.",
"다시 로그인해주세요", function(){location.href = "/logoutProcess.do";} )
return;
}).catch(function(err){
console.error(err);
});
return;
worker.terminate();
}
}
}
else{
$(".sessionTimer").html("해당 브라우저에서 지원하지 않습니다. 크롬을 권장합니다");
}
}
|
cs |
5번째 줄 : 워커를 생성한다. 경로에는 .path/worker.js 이런식으로 적어주면 된다.
6번째 줄 : 세션타임아웃 시간이다. (ex.180 => 3시간)
7번째 줄 : 워커 파일에 메세지를 보낸다.
13번째 줄 : 워커 파일에서 받은 메세지가 있을 때 처리한다.
27번째 줄 : 워커를 종료한다. (세션타임아웃 시간을 종료 시키기 위함)
<워커 자바스크립트 파일>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// main에서 postMessage의 값을 받는다.
onmessage = function(e){
doTimer(e.data);
}
function doTimer(time){
postMessage(time);
if(time){
--time;
timer = setTimeout(doTimer, 1000, time);
}
else{
return;
}
return;
}
|
cs |
2번째 줄 : 워커를 호출한 곳으로부터 메세지를 받아서 처리한다.
8번째 줄 : 워커를 호출한 곳으로 메세지를 보낸다.