복붙노트

PHP 세션이 이미 시작되었는지 확인하십시오.

PHP

PHP 세션이 이미 시작되었는지 확인하십시오.

세션을 시작한 페이지에서 때로는 세션이 시작되지 않은 페이지에서 가끔 호출되는 PHP 파일이 있습니다. 따라서이 스크립트에서 session_start ()를 사용하면 "세션이 이미 시작되었습니다"라는 오류 메시지가 나타납니다. 이를 위해 다음 라인을 추가했습니다.

if(!isset($_COOKIE["PHPSESSID"]))
{
  session_start();
}

그러나 이번에 나는이 경고 메시지를 얻었다.

세션이 이미 시작되었는지 확인하는 더 좋은 방법이 있습니까?

@session_start를 사용하면 정상적으로 작동하고 경고를 닫을 수 있습니까?

해결법

  1. ==============================

    1.PHP> = 5.4.0 버전에 권장되는 방법

    PHP> = 5.4.0 버전에 권장되는 방법

    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
    

    출처 : http://www.php.net/manual/en/function.session-status.php

    PHP 버전이 5.4.0 미만인 경우

    if(session_id() == '') {
        session_start();
    }
    
  2. ==============================

    2.PHP 5.4.0 이전 버전의 PHP :

    PHP 5.4.0 이전 버전의 PHP :

    if(session_id() == '') {
        // session isn't started
    }
    

    하지만, IMHO, 세션 시작 여부를 모르는 경우 세션 관리 코드 리팩토링에 대해 정말로 생각해야합니다 ...

    즉, 제 생각은 주관적이며, 세션이 시작되었는지 여부를 알 수없는 경우가 있습니다 (아래 예에 설명 된 사례).

  3. ==============================

    3.PHP 5.4에서는 session_id ()에 의존하는 것보다 더 안정적인 session_status ()가 도입되었습니다.

    PHP 5.4에서는 session_id ()에 의존하는 것보다 더 안정적인 session_status ()가 도입되었습니다.

    다음 스 니펫을 고려하십시오.

    session_id('test');
    var_export(session_id() != ''); // true, but session is still not started!
    var_export(session_status() == PHP_SESSION_ACTIVE); // false
    

    따라서 세션이 시작되었는지 확인하기 위해 PHP 5.4에서 권장되는 방법은 다음과 같습니다.

    session_status() == PHP_SESSION_ACTIVE
    
  4. ==============================

    4.당신은 이것을 할 수 있고, 그것은 정말로 쉽습니다.

    당신은 이것을 할 수 있고, 그것은 정말로 쉽습니다.

    if (!isset($_SESSION)) session_start();
    

    희망이 도움이 :)

  5. ==============================

    5.

    if (version_compare(phpversion(), '5.4.0', '<')) {
         if(session_id() == '') {
            session_start();
         }
     }
     else
     {
        if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }
     }
    
  6. ==============================

    6.PHP 5.4 이전에는 글로벌 플래그를 설정하는 것 외에는 알 수있는 방법이 없습니다.

    PHP 5.4 이전에는 글로벌 플래그를 설정하는 것 외에는 알 수있는 방법이 없습니다.

    중히 여기다:

    var_dump($_SESSION); // null
    session_start();
    var_dump($_SESSION); // array
    session_destroy();
    var_dump($_SESSION); // array, but session isn't active.
    

    또는:

    session_id(); // returns empty string
    session_start();
    session_id(); // returns session hash
    session_destroy();
    session_id(); // returns empty string, ok, but then
    session_id('foo'); // tell php the session id to use
    session_id(); // returns 'foo', but no session is active.
    

    따라서 PHP 5.4 이전에는 전역 부울을 설정해야합니다.

  7. ==============================

    7.모든 PHP 버전

    모든 PHP 버전

    if ((function_exists('session_status') 
      && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
      session_start();
    }
    
  8. ==============================

    8.이것을 확인하십시오 :

    이것을 확인하십시오 :

    <?php
    /**
    * @return bool
    */
    function is_session_started()
    {
        if ( php_sapi_name() !== 'cli' ) {
            if ( version_compare(phpversion(), '5.4.0', '>=') ) {
                return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
            } else {
                return session_id() === '' ? FALSE : TRUE;
            }
        }
        return FALSE;
    }
    
    // Example
    if ( is_session_started() === FALSE ) session_start();
    ?>
    

    출처 http://php.net

  9. ==============================

    9.session_id ()를 사용하면 설정되지 않은 경우 빈 문자열을 반환합니다. $ _COOKIE를 검사하는 것보다 더 안정적입니다.

    session_id ()를 사용하면 설정되지 않은 경우 빈 문자열을 반환합니다. $ _COOKIE를 검사하는 것보다 더 안정적입니다.

    if (strlen(session_id()) < 1) {
        session_start();
    }
    
  10. ==============================

    10.

    if (session_id() === "") { session_start(); }
    

    도움이되기를 바랍니다!

  11. ==============================

    11.이것은 모든 PHP 버전에서 작동합니다. 그것은 PHP 버전을 결정한 다음 PHP 버전에 따라 세션이 시작되었는지 확인합니다. 그런 다음 세션이 시작되지 않으면 세션이 시작됩니다.

    이것은 모든 PHP 버전에서 작동합니다. 그것은 PHP 버전을 결정한 다음 PHP 버전에 따라 세션이 시작되었는지 확인합니다. 그런 다음 세션이 시작되지 않으면 세션이 시작됩니다.

    function start_session() {
      if(version_compare(phpversion(), "5.4.0") != -1){
        if (session_status() == PHP_SESSION_NONE) {
          session_start();
        }
      } else {
        if(session_id() == '') {
          session_start();
        }
      }
    }
    
  12. ==============================

    12.당신이해야 할 유일한 일은 다음과 같습니다.

    당신이해야 할 유일한 일은 다음과 같습니다.

    <?php
    if(!isset($_SESSION))
    {
    session_start();
    }
    ?>
    
  13. ==============================

    13.그러한 솔루션의 효율성에 대해서는 확실하지 않지만, 이것은 작업 프로젝트에서 나왔습니다. 기본 언어를 정의해야하는 경우에도 사용됩니다.

    그러한 솔루션의 효율성에 대해서는 확실하지 않지만, 이것은 작업 프로젝트에서 나왔습니다. 기본 언어를 정의해야하는 경우에도 사용됩니다.

       /**
        * Start session
        * Fall back to ukrainian language
        */
       function valid_session() {
        if(session_id()=='') {
            session_start();
            $_SESSION['lang']='uk';
            $_SESSION['lang_id']=3;
        }
        return true;
      }
    
  14. ==============================

    14.페이지 실행 당 한 번 session_start ()를 호출하도록 코드를 재구성해야합니다.

    페이지 실행 당 한 번 session_start ()를 호출하도록 코드를 재구성해야합니다.

  15. ==============================

    15.@Meliza Ramos Response (첫 번째 응답 참조) 및 http://php.net/manual/en/function.phpversion.php를 기반으로 한 응답

    @Meliza Ramos Response (첫 번째 응답 참조) 및 http://php.net/manual/en/function.phpversion.php를 기반으로 한 응답

    행위:

    openSession () 만 사용하십시오.

        // PHP_VERSION_ID is available as of PHP 5.2.7, if our
        // version is lower than that, then emulate it
        if (!defined('PHP_VERSION_ID')) {
            $version = explode('.', PHP_VERSION);
    
            define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
    
    
            // PHP_VERSION_ID is defined as a number, where the higher the number
            // is, the newer a PHP version is used. It's defined as used in the above
            // expression:
            //
            // $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
            //
            // Now with PHP_VERSION_ID we can check for features this PHP version
            // may have, this doesn't require to use version_compare() everytime
            // you check if the current PHP version may not support a feature.
            //
            // For example, we may here define the PHP_VERSION_* constants thats
            // not available in versions prior to 5.2.7
    
            if (PHP_VERSION_ID < 50207) {
                define('PHP_MAJOR_VERSION',   $version[0]);
                define('PHP_MINOR_VERSION',   $version[1]);
                define('PHP_RELEASE_VERSION', $version[2]);
    
                // and so on, ...
            }
        }
    
        function phpVersionAtLeast($strVersion = '0.0.0')
        {
            $version = explode('.', $strVersion);
    
            $questionVer = $version[0] * 10000 + $version[1] * 100 + $version[2];
    
            if(PHP_VERSION_ID >= $questionVer)
                return true;
            else
                return false;
    
        }
    
        function openSession()
        {
            if(phpVersionAtLeast('5.4.0'))
            {
                if(session_status()==PHP_SESSION_NONE)
                    session_start();
            }
            else // under 5.4.0
            {
                if(session_id() == '')
                    session_start();
            }
        }
    
  16. ==============================

    16.

    if (version_compare(PHP_VERSION, "5.4.0") >= 0) {
        $sess = session_status();
        if ($sess == PHP_SESSION_NONE) {
            session_start();
        }
    } else {
        if (!$_SESSION) {
            session_start();
        }
    }
    

    사실, 해결 된 것처럼 여기에 설명하기에는 너무 늦었습니다. 이것은 요리를 선택하고 주문을 제거 / 추가하거나 변경하여 식당 메뉴를 구성하는 프로젝트 중 하나의 .inc 파일이었습니다. 내가 작업하고 있던 서버에는 실제 버전이 없었기 때문에 더 유연하게 만들었습니다. 저자가 사용하고 시도해 보는 것이 좋습니다.

  17. ==============================

    17.이 코드 스 니펫이 효과가 있습니까?

    이 코드 스 니펫이 효과가 있습니까?

    if (!count($_SESSION)>0) {
        session_start();
    }
    
  18. ==============================

    18.PHP 5.3에서이 기능은 저에게 유용합니다 :

    PHP 5.3에서이 기능은 저에게 유용합니다 :

    if(!strlen(session_id())){
        session_name('someSpecialName');
        session_start();
    } 
    

    그때 너는. if 문을 시작하지 않은 상태로 두지 않으면 세션이 시작되지 않습니다. 이유는 없습니다.

  19. ==============================

    19.

    session_start();
    if(!empty($_SESSION['user']))
    {     
      //code;
    }
    else
    {
        header("location:index.php");
    }
    
  20. ==============================

    20.PHP_VERSION_ID는 PHP 5.2.7부터 사용 가능하므로 먼저 확인하고 필요하면 생성하십시오. session_status는 PHP 5.4부터 사용 가능합니다. 그래서 이것을 확인해야합니다 :

    PHP_VERSION_ID는 PHP 5.2.7부터 사용 가능하므로 먼저 확인하고 필요하면 생성하십시오. session_status는 PHP 5.4부터 사용 가능합니다. 그래서 이것을 확인해야합니다 :

    if (!defined('PHP_VERSION_ID')) {
        $version = explode('.', PHP_VERSION);
        define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
    }else{
        $version = PHP_VERSION_ID;
    }
    if($version < 50400){
        if(session_id() == '') {
            session_start();
        }
    }else{
        if (session_status() !== PHP_SESSION_ACTIVE) {
            session_start();
        }
    }
    
  21. ==============================

    21.세션이 시작되었는지 확인하기 위해 사용하는 것은 다음과 같이 empty 및 isset을 사용하는 것입니다.

    세션이 시작되었는지 확인하기 위해 사용하는 것은 다음과 같이 empty 및 isset을 사용하는 것입니다.

    if (empty($_SESSION)  && !isset($_SESSION))  {
    session_start();
    }
    
  22. ==============================

    22.내 연습에 따라 $ _SESSION []에 액세스하기 전에 스크립트를 사용하기 위해 매회 session_start를 호출해야합니다. 매뉴얼은 아래 링크를 참조하십시오.

    내 연습에 따라 $ _SESSION []에 액세스하기 전에 스크립트를 사용하기 위해 매회 session_start를 호출해야합니다. 매뉴얼은 아래 링크를 참조하십시오.

    http://php.net/manual/en/function.session-start.php

    나에게 적어도 session_start는 이름으로 혼란 스럽다. session_load가 더 명확 할 수 있습니다.

  23. ==============================

    23.나는 두 번 상태 확인을했다. PHP 5.4 이상

    나는 두 번 상태 확인을했다. PHP 5.4 이상

    if(session_status() !== PHP_SESSION_ACTIVE){session_start();};
    if(session_status() !== PHP_SESSION_ACTIVE){die('session start failed');};
    
  24. ==============================

    24.바꾸십시오 session_start (); 와:

    바꾸십시오 session_start (); 와:

    if (!isset($a)) {
        a = False;
        if ($a == TRUE) {
            session_start();
            $a = TRUE;
        }
    }
    
  25. from https://stackoverflow.com/questions/6249707/check-if-php-session-has-already-started by cc-by-sa and MIT license