본문 바로가기

세션을 무한대로 유지하되, 브라우저가 닫히면 세션이 종료되도록 하는 것은 웹 애플리케이션의 일반적인 동작 원칙과는 약간 다른 접근을 필요로 합니다. 웹 세션은 서버 측에서 관리되기 때문에, 브라우저를 닫는 것만으로 세션을 자동으로 종료하는 것은 서버 측에서 직접적으로 처리하기 어렵습니다. 그러나 몇 가지 접근 방법을 사용하여 비슷한 동작을 구현할 수 있습니다.

접근 방법

  1. 브라우저 세션 쿠키 사용
    • 브라우저 세션 쿠키를 사용하면 브라우저가 닫힐 때 쿠키가 자동으로 삭제되며, 이를 통해 세션을 종료할 수 있습니다.
    • 세션 쿠키를 사용하여 로그인 정보를 저장하고, 쿠키가 삭제되면 서버 측에서 세션을 종료하는 방법입니다.
<script>
document.cookie = "session=your_session_id; path=/";
</script>

브라우저가 닫힐 때 쿠키가 삭제되며, 서버 측에서 세션이 종료되도록 할 수 있습니다.

 

  1. 브라우저 탭/창 닫기 감지
  • 브라우저 탭이나 창을 닫을 때 서버에 요청을 보내어 세션을 종료할 수 있습니다.
  • JavaScript의 beforeunload 이벤트를 사용하여 브라우저 탭이나 창을 닫을 때 세션 종료 요청을 서버로 보내는 방법입니다.
  • 예시
window.addEventListener('beforeunload', function() {
    navigator.sendBeacon('/endSession', JSON.stringify({ sessionId: 'your_session_id' }));
});

 

sendBeacon 메서드를 사용하여 비동기 요청을 보내고, 서버 측에서 이를 처리하여 세션을 종료합니다.

서버 측 (ASP):

' endSession.asp
<%
Dim conn, cmd, sessionID
sessionID = Request.Form("sessionId")

Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")

conn.Open "Provider=SQLOLEDB;Data Source=YourServerName;Initial Catalog=YourDatabaseName;User ID=YourUserID;Password=YourPassword;"

cmd.ActiveConnection = conn
cmd.CommandText = "UPDATE SessionLog SET SessionEndTime = ? WHERE SessionID = ?"
cmd.Parameters.Append cmd.CreateParameter("@SessionEndTime", 135, 1, , Now())
cmd.Parameters.Append cmd.CreateParameter("@SessionID", 200, 1, 255, sessionID)

cmd.Execute

conn.Close
Set cmd = Nothing
Set conn = Nothing
%>

 

  1. 클라이언트-서버 상호작용
  • 클라이언트 측에서 사용자의 활동을 주기적으로 서버로 보내서 세션이 여전히 유효한지 확인하는 방법입니다.
  • 브라우저가 닫히면 클라이언트 측에서 서버로 요청을 보내지 않으므로, 서버에서 세션을 종료할 수 있습니다.
  • 예시
setInterval(function() {
    fetch('/keepSessionAlive', { method: 'POST', body: JSON.stringify({ sessionId: 'your_session_id' }) });
}, 60000); // 1분마다 서버에 요청

 

서버 측 (ASP):

' keepSessionAlive.asp
<%
Dim conn, cmd, sessionID
sessionID = Request.Form("sessionId")

Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")

conn.Open "Provider=SQLOLEDB;Data Source=YourServerName;Initial Catalog=YourDatabaseName;User ID=YourUserID;Password=YourPassword;"

cmd.ActiveConnection = conn
cmd.CommandText = "UPDATE SessionLog SET SessionStartTime = ? WHERE SessionID = ?"
cmd.Parameters.Append cmd.CreateParameter("@SessionStartTime", 135, 1, , Now())
cmd.Parameters.Append cmd.CreateParameter("@SessionID", 200, 1, 255, sessionID)

cmd.Execute

conn.Close
Set cmd = Nothing
Set conn = Nothing
%>

 

요약

  • 세션 쿠키 사용: 브라우저가 닫히면 쿠키가 삭제되어 세션이 종료됩니다.
  • 브라우저 닫기 감지: beforeunload 이벤트를 사용하여 브라우저 닫기 시 세션 종료 요청을 서버로 보냅니다.
  • 클라이언트-서버 상호작용: 클라이언트에서 주기적으로 서버에 요청을 보내어 세션을 유지하거나 종료합니다.

각 방법은 장단점이 있으며, 필요한 경우 조합하여 사용할 수 있습니다. 브라우저를 닫는 것으로 세션을 종료하는 동작은 웹 애플리케이션의 동작 원칙과 맞지 않지만, 위의 방법들을 통해 유사한 동작을 구현할 수 있습니다.

반응형

코카티비-CoCaTV

생활하면서 불편한 것들, 생활하면서 다음에 또 찾게 될 것 같은 것들, 기록 해뒀습니다.