
const customActivityEvents = [
"click",
"mousemove",
"keydown",
"DOMMouseScroll",
"mousewheel",
"mousedown",
"touchstart",
"touchmove",
"focus",
];
<ActivityDetector
activityEvents={customActivityEvents}
enabled={true}
onActive={() => onActive()}
/>
<Component {...pageProps} />
onActive 함수에는 다음과 같이 코드를 짜서 사이트 로드시 useEffect 로 30분 짜리 만료 시간을 가진 session_id 를 쿠키에 저장하고, 사용자 acitivity 가 감지가 되면 함수를 돌려서 session_id 가 만료되어 undefined 라면 다시 generateSessionId 를 돌려서 발생한 새로운 난수를 주고, 그게 아니라면 session_id 는 쿠키에서 다시 가져와 동일한 난수를 주고 expires 만 30분씩 늘리도록 했다.
const onActive = () => {
let date = new Date();
date.setTime(date.getTime() + 30 * 60000);
if (
document.cookie.split("session_id=")[1]?.split(" ")[0].replace(";", "") ==
undefined
) {
document.cookie = `session_id=${generateSessionId()}; expires=${date.toUTCString()}; path=/`;
} else {
document.cookie = `session_id=${document.cookie
.split("session_id=")[1]
?.split(" ")[0]
.replace(";", "")}; expires=${date.toUTCString()}; path=/`;
}
};
코드를 작성하고 보니 사용자 액션이 있을 때 마다 onActive 함수를 계속 호출 하는것에 대한 효율에 대한 의구심도 들고, 무엇보다 쿠키의 expire 에 대한 지식 부족으로 인해 쿠키에 GMT 기반으로 저장 되는것을 "왜 시간이 이상하게 저장되지?" 하며 한국시간과 맞춘다고 9시간을 더해버리는 만행을 저질러서(만료시간이 9시간 30분인 쿠키를 만든것이다..) 쿠키가 절대 expire 되지 않았다.. 쿠키의 만료 시간을 1분으로 정해놓고 테스트를 해보며 왜 쿠키가 삭제되지 않을까 머리를 쥐어 뜯으며 이것저것 시도를 해보았지만 절대 바뀌지 않는(expire 되지 않았으므로) session_id 값을 보며 절망에 빠졌었다. 쿠키는 GMT 를 기반으로 expires 를 저장 해야 한다!!!!!!!!!!!!!!!!!
쿠키 만료 시간과의 삽질 이후, google analytics가 제공하는 세션 아이디를 가져와 사용 하기로 했다. 이에 대해서는 다음 글에서 다루도록 하겠다. AcvitivyDetector는 모든 사용자 action 을 detect 해서 쿠키를 업데이트 해야 하는 니즈에 대한 비효율성과, cookie expire의 삽질로 인해 내 dead babies 폴더에 추가 되었지만 나중에 분명히 유용하게 쓸일이 있을거 같아 기록하게 되었다.