때로는 세션을 시작한 페이지와 세션이 시작되지 않은 페이지에서 호출되는 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();
}