itsource

PHP 세션이 이미 시작되었는지 확인합니다.

mycopycode 2022. 11. 15. 21:41
반응형

PHP 세션이 이미 시작되었는지 확인합니다.

세션이 시작된 페이지에서 호출되거나 세션이 시작되지 않은 페이지에서 호출되는 PHP 파일이 있습니다. 제가 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★session_start()이미 시작했어요. 때문에 이렇게 .

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

하지만 이번에는 이런 경고 메시지를 받았습니다.

주의: 정의되지 않은 변수: _SESSION

세션이 이미 시작되었는지 확인할 수 있는 더 좋은 방법이 있나요?

@session_start제대로 작동해서 경고만 막을 수 있을까요?

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

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();
}

PHP 5.4.0 이전 버전의 경우:

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

IMHO, 세션이 시작되었는지 여부를 모르면 세션 관리 코드를 리팩터링하는 것을 고려해야 합니다.

다만, 제 의견은 주관적인 것으로, 세션의 개시 여부를 알 수 없는 상황(아래의 코멘트에 기재되어 있는 예)이 있습니다.

PHP 5.4는 session_status()를 도입했습니다.이것은, 신뢰성이 높은 것입니다.session_id().

다음의 스니펫을 검토해 주세요.

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

당신은 할 수 있고, 정말 쉬워요.

if (!isset($_SESSION)) session_start();
if (version_compare(phpversion(), '5.4.0', '<')) {
     if(session_id() == '') {
        session_start();
     }
 }
 else
 {
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
 }

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 이전에 글로벌 부울을 설정해야 합니다.

모든 php 버전에 대해

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

체크해 주세요.

<?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

session_id()를 사용하면 설정되지 않은 경우 빈 문자열을 반환합니다.이 방법이 더 신뢰할 수 있습니다.$_COOKIE.

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

도움이 되길 바래!

이것은 모든 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();
    }
  }
}

필요한 것은 다음과 같습니다.

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

이러한 솔루션의 효율성에 대해서는 잘 모르지만, 이것은 실제 프로젝트의 결과입니다.기본 언어를 정의할 필요가 있는 경우에도 사용됩니다.

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

@함수 콜이 함수 콜 중에 보고될 수 있는 오류를 억제하기 전에.

추가@전에session_start에러 메시지 인쇄를 피하도록 PHP에 지시합니다.

예를 들어 다음과 같습니다.

사용.session_start()이미 브라우저에 인쇄한 결과 오류가 발생하여 PHP에 "headers cannot be send: started at (12행)"와 같은 메시지가 나타납니다.@session_start()이 경우에도 에러 메시지는 화면에 표시되지 않습니다.

파일을 포함하거나 새 페이지로 리디렉션하기 전에exit()그렇지 않으면 오류가 발생합니다.

이 코드는 모든 경우에 사용할 수 있습니다.


    <?php 
        if (session_status() !== PHP_SESSION_ACTIVE || session_id() === ""){
            session_start(); 
        }
    ?>

PHP 5.3에서는 다음과 같이 동작합니다.

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

그럼 네가 해냈군요.not at if 스테이트먼트를 넣지 않으면 세션을 시작하는 어떤 방법으로든 시작할 수 있습니다.이유는 알 수 없습니다.

응답은 @Meliza Ramos Response (최초 응답 참조)및 http://php.net/manual/en/function.phpversion.php 에 근거하고 있습니다.

액션:

  • PHP_VERSION_ID가 없는 경우 정의
  • PHP_VERSION_을 기반으로 버전을 확인하는 함수를 정의합니다.아이디
  • openSession() 시큐어 함수를 정의합니다.

open Session()만 사용

    // 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();
        }
    }
if (version_compare(PHP_VERSION, "5.4.0") >= 0) {
    $sess = session_status();
    if ($sess == PHP_SESSION_NONE) {
        session_start();
    }
} else {
    if (!$_SESSION) {
        session_start();
    }
}

사실, 이미 해결이 되었기 때문에 여기서 설명하기에는 너무 늦었다.이것은 요리를 선택하여 레스토랑의 메뉴를 설정하고 주문을 삭제/추가/변경하는 프로젝트 중 하나입니다.제가 일하던 서버는 실제 버전이 없어서 좀 더 유연하게 만들었습니다.그것은 그것을 사용하고 시험해보고 싶은 작가들에게 달려있다.

이 코드 스니펫으로 괜찮으시겠어요?

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

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

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

코드를 재구성하여 다음 주소로 전화를 걸어야 합니다.session_start()1페이지에 1회만 실행할 수 있습니다.

PHP_VERSION_ID는 PHP 5.2.7에서 사용할 수 있으므로 먼저 이것을 확인하고 필요에 따라 작성하십시오. session_statusPHP 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();
    }
}

제 실습을 바탕으로 하면$_SESSION[]전화할 필요가 있다session_start매번 스크립트를 사용합니다.매뉴얼에 대해서는 아래 링크를 참조해 주세요.

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

적어도 나에게는session_start이름이 헷갈리네요.asession_load더 명확해질 수 있습니다.

상태를 다시 한 번 확인하게 되었습니다.php 5.4+

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

다음 솔루션을 사용하여 PHP 세션이 이미 시작되었는지 확인할 수 있습니다.

if(session_id()== '')
{
   echo"Session isn't Start";
}
else
{
    echo"Session Started";
}
session_start();
if(!empty($_SESSION['user']))
{     
  //code;
}
else
{
    header("location:index.php");
}

교체하다session_start();포함:

if (!isset($a)) {
    a = False;
    if ($a == TRUE) {
        session_start();
        $a = TRUE;
    }
}

언급URL : https://stackoverflow.com/questions/6249707/check-if-php-session-has-already-started

반응형