[php] PHP 세션이 이미 시작되었는지 확인

때로는 세션을 시작한 페이지와 세션이 시작되지 않은 페이지에서 호출되는 PHP 파일이 있습니다. 따라서이 session_start()스크립트를 사용할 때 “세션이 이미 시작되었습니다”라는 오류 메시지가 표시되는 경우가 있습니다. 이를 위해 다음 줄을 넣었습니다.

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

그러나 이번에는이 경고 메시지가 나타납니다.

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

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

내가 사용 @session_start하면 제대로 작동하고 경고를 종료합니까?



답변

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

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 이전의 PHP 버전 :

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