본문 바로가기

Backend

PHP 세션 값을 왜 읽어올 수 없을까?

현재 세션이 설정한 시간을 초과했는지 확인하는 로직을 테스트하는 중이었다. 분명히 $_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