PHP 세션이 요청 도중에 시간이 지나면 $ _session 배열은 어떻게됩니까?

StackOverflow https://stackoverflow.com/questions/1002935

  •  05-07-2019
  •  | 
  •  

문제

스크립트를 실행하는 동안 PHP 세션이 시간이 지나면 스크립트 실행이 끝날 때까지 $ _session 배열의 내용이 여전히 사용할 수 있을까요? 예를 들어:

session_start();

if(! isset($_SESSION['name'])) {
    echo 'Name is not set';
    exit;
}

// imagine there is a bunch of code here and that the session times out while
// this code is being executed

echo 'Name is ', $_SESSION['name']; // will this line throw an error?

세션 변수를 로컬 범위에 복사하는 것이 실용적입니까? 같은 것 :

session_start();

if(isset($_SESSION['name'])) {
    $name = $_SESSION['name'];
} else {
    echo 'Name is not set';
    exit;
}

// bunch of code here

echo 'Name is ', $name;
도움이 되었습니까?

해결책

그런 것들에 대해 걱정하지 마십시오. 세션에는 아무 일도 일어나지 않을 것입니다. 초기화되었습니다 sessioni_start() 그리고 $_SESSION 스크립트 내에서 항상 사용할 수 있습니다.

다른 팁

세션을 열 때마다 기본 3 시간 세션 수명이 재설정됩니다 ( session_cache_expire), 요청 도중에 세션이 시간을 초과 할 수있는 유일한 방법은 요청이 처리하는 데 3 시간이 걸린 경우입니다. 기본적으로 PHP는 단 30 초 후에 시간 초과를 요청하므로 요청 중에 세션 만료의 위험이 없습니다. 또한, $_SESSION 요청의 중간에 변수가 갑자기 변하지 않습니다. 세션이 시작될 때 채워졌습니다.

초기 요청시 변수는 $ _session Global에 복사되므로 로컬 변수에 복사하는 것과 동일한 효과가 있습니다.

그러나 명확성을 위해 로컬 변수에 복사하는 것이 합리적입니다. 특히 변수를 여러 번 사용하려는 경우. 모든 곳에서 $ _session [ 'variable']가있는 코드를 읽기가 어려울 수 있습니다.

이해해야 할 것은 세션이 어떻게 작동하는지입니다. $ _session Super Global을 사용하여 스크립트에 액세스하는 클라이언트는 쿠키/URL에 저장된 세션의 열쇠 만 알고 있습니다. 이는 세션 데이터 자체가 클라이언트와 아무 관련이 없음을 의미합니다. 사용하려는 세션 데이터의 키가 있으면 사용할 수 있습니다. 이전 버전의 PHP에는 쉽게 액세스 할 수있는 곳에 보관 된 세션 (세부 사항을 기억하지 않습니다).

기본적으로 PHP 스크립트에 세션 ID가있는 경우 시스템의 메모리가 플러시되지 않으면 해당 세션에 액세스 할 수 있습니다.

이것이 도움이되기를 바랍니다. 그렇지 않으면 php.net으로 이동하여 세션의 작동 방식에 대한 세부 사항을 살펴보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top