현재 세션이 설정한 시간을 초과했는지 확인하는 로직을 테스트하는 중이었다. 분명히 $_SESSION['lastSessionTime']에 값을 설정했는데, 다시 웹요청을 했을 때, 해당 값을 읽을 수 없었다. 어디선가 초기화하거나 $_SESSION에 설정하는 값에 특별한 예외 사항이 있는 줄 알았다. 알고 보니, session_start()를 사용하기 전에 해당 값을 확인하고 있었던 것이다.
<?php
$time = $_SERVER['REQUEST_TIME'];
$timeoutDuration = 1800;
echo $_SESSION['lastSessionTime'];
session_start();
$_SESSION은 항상 글로벌로 값을 가지고 있다고 생각했는데 그렇지 않았다. session_start()를 실행한 후에, 이전 세션이 여전히 살아 있다면 $_SESSION 변수에 저장된 정보를 계속 사용할 수 있는 것이었다. 기본적으로 session_start()를 실행하고 $_SESSION['lastSessionTime'] 값을 얻어와서 현재 세션이 의도한 시간을 초과했는지 확인하면 된다.
<?php
$time = $_SERVER['REQUEST_TIME'];
$timeoutDuration = 1800;
session_start();
if(isset($_SESSION['lastSessionTime']))
{
if(($time - $_SESSION['lastSessionTime']) > $timeoutDuration)
{
session_unset();
session_destroy();
session_start();
}
}
$_SESSION['lastSessionTime'] = $time;
'Backend' 카테고리의 다른 글
인터넷 망에서 내 라우터를 접근하지 못했던 이유 (0) | 2022.07.14 |
---|