function my_session_start() {

    @session_start();

    if (isset($_SESSION['destroyed'])) {

        if ($_SESSION['destroyed'] < time()-300) {

            // 일반적으로 일어나서는 안됨. 느리거나 불안정한 네트웍일때

            // 이 사용자 세션의 모든 인증상태를 제거

            @remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);

            //throw(new DestroyedSessionAccessException);

        }

        if (isset($_SESSION['new_session_id'])) {

            // 아직 만료되지 않음. 불안정한 네트워크로 인해 쿠키가 손실될 수 있음

            // 다시 올바른 세션ID 쿠키 생성

            // 주의: 인증 플래그를 제거하려면 세션 ID를 다시 설정하지 마십시오.

            session_commit();

            session_id($_SESSION['new_session_id']);

            // 새로운 세션ID가 있어야 함.

            @session_start();

            return;

        }

    }

    

    //session_write_close();

}

 

 

 

my_session_start();

 

 

 

 

 

 

function my_session_regenerate_id() {

            // 불안정한 네트워크로 인해 세션ID가 설정되지 않은 경우 올바른 세션ID를 설정하려면 새 세션ID가 필요함.

            

            $new_session_id = session_create_id();

            //$new_session_id = session_regenerate_id();//for php7.0

            $_SESSION['new_session_id'] = $new_session_id;

            

            // Set destroy timestamp

            $_SESSION['destroyed'] = time();

            

            // 현재 세션 쓰기 및 닫기;

// DB에 세션을 저장하는 경우 주석처리

            session_save_path($_SERVER['DOCUMENT_ROOT'] . "/data/session");

            

            session_commit();

            

            // Start session with new session ID

            session_id($new_session_id);

            ini_set('session.use_strict_mode', 0);

            @session_start();

            ini_set('session.use_strict_mode', 1);

            

            // New session does not need them

            unset($_SESSION['destroyed']);

            unset($_SESSION['new_session_id']);

}

        

 

my_session_regenerate_id();

 

 

 

 

참조 : http://php.net/manual/en/function.session-regenerate-id.php

 

블로그 이미지

엘로드넷

,