PHP에서 session_unset ()과 session_destroy ()의 차이점은 무엇입니까?


88

로부터 php.net의 문서 :

session_destroy — 세션에 등록 된 모든 데이터를 삭제합니다.

session_unset — 모든 세션 변수 해제

세 부분으로 구성된 질문은 다음과 같습니다.

두 기능은 매우 비슷해 보입니다.
둘의 차이점은 무엇입니까?

둘 다 세션에 등록 된 모든 변수를 삭제하는 것 같습니다. 그들 중 어떤 것이 실제로 세션 자체를 파괴합니까? 그렇지 않은 경우이를 어떻게 수행합니까 (세션 자체를 파괴).

두 기능 중 어느 것도 클라이언트에서 세션 쿠키를 삭제하지 않는 것이 맞습니까?

답변:


145

session_unset$_SESSION변수를 지 웁니다 . 다음을 수행하는 것과 동일합니다.

$_SESSION = array();

따라서 이것은 로컬 $_SESSION변수 인스턴스 에만 영향을 미치고 세션 저장소의 세션 데이터에는 영향을 미치지 않습니다.

이와 반대로 session_destroy세션 저장소에 저장된 세션 데이터 (예 : 파일 시스템의 세션 파일)를 삭제합니다.

다른 모든 것은 변경되지 않습니다.


@Gumbo session_unset ()이 현재 사용되지 않는 데 문제가 없습니까? 나는 이것을 확인했지만 작동하지 않았습니다.
Navneet 2012

@hakre 경고는 무엇입니까?
GoTo

4
@GoTo : 그 session_unset은 PHP 4에서 흔히 볼 수 있듯이 세션 변수로 등록 된 전역 변수를 설정 해제하는 데 사용되었습니다. 오늘날이 함수의 사용은 시대 착오적이며 필요하지 않습니다. 여전히 PHP에있는 유일한 이유는 아마도 이전 버전과의 호환성과 그 밖의 것은 없을 것입니다. 새 코드를 작성하는 경우에는 사용하지 마십시오. 코드 내에서 찾을 경우 명시 적으로 PHP 4 코드를 처리하지 않는 한 session_register () 및 나머지 PHP 4 세션 변수 처리 함수 호출과 함께이를 제거해야합니다.
hakre 2013-09-18

5
여전히 혼란 스럽습니다. 설명해주세요 local $_SESSION variable instance vs session data in the session storage. 내가 아는 것처럼 나 같은 사람들이 당신의 요점을 이해하지 못한 1000이 있습니다. 감사합니다
Pratik

1
답변이 너무 혼란 스럽습니다. 나는 아직도 모두 파괴하고 세션 생각하기 때문에, 그것을 수정하십시오
Pratik

17

session_destroy(); 전체 세션을 삭제합니다.

session_unset();세션에서 변수 만 삭제합니다. 세션이 여전히 존재합니다. 데이터 만 잘립니다.


15
session_unset();

모든 세션 변수의 모든 데이터를 지우십시오.


session_destroy();

모든 세션을 제거하십시오.


:

session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]입니다 NULL.


session_start();
session_unset();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]입니다 1234.


따라서 다음을 사용합니다.

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;

2
중간 예에서-> session_unset();세션을 계속 사용할 수 있으므로 아무것도하지 않고 $_SESSION["a"] 있으므로 사용은 무엇입니까?
Pratik

1
$_SESSION[a]해야 $_SESSION['a'] 하고이 첫 번째 예에서 NULL이 아니다 말과는 달리
Istiaque 아메드

5

session_unset()$_SESSION에서와 같이 변수 를 지우지 array()만 세션 파일은 건드리지 않습니다. 그러나 스크립트가 끝날 때; 의 상태가 $_SESSION파일에 기록됩니다. 그런 다음 파일을 지우지 만 삭제하지는 않습니다. 사용할 때 (사용 후 사용 )을 session_destroy()터치하지 않고 세션 파일을 삭제하므로 스크립트가 종료되면 .$_SESSIONvar_dump($_SESSION)session_destroy()$_SESSION



0

session_unset($_SESSION['session_name'])특정 또는 개별 / 단일 세션 이름 만 설정 해제 할 것이라고 생각 하여 사용 하려고했습니다. 그러나 사용 session_unset($_SESSION['session_name'])하면 모든 세션 이름이 설정 해제됩니다. 사용할 올바른 코드 unset($_SESSION['session_name'])는 단일 세션 이름을 설정 해제하려는 경우 에만 가능합니다.


0

session_start (); # 브라우저 실시간 메모리에 가상 어레이 (연관)를 생성합니다.

두 항목 추가

> $_SESSION['me'] = "Yadab";  
> $_SESSION['you'] = "Avi";
>
> print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )

test1

> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) 
> print_r($_SESSION); #now the array is Array("you"=>"Avi")

test2

> session_destroy(); #will unset the values of all session variables, but indexes exists 
> print_r($_SESSION); #Output, Array("you"=>undefined)
> #but some browser can store the value in cookies

test3

> session_unset(); #will unset all the main variables not only the values 
> print_r($_SESSION); #that means session array is now empty, like Array()

다른 사람을 주석 처리하여 개별적으로 블록 1, 2 또는 3 테스트


-2

세션 데이터가 확실히 삭제되도록 session_destroy ()와 session_unset ()을 동시에 사용해야한다고 생각합니다.


답이 확실하지 않다는 뜻이라고 생각합니다.
Shaiful Islam

4
session_unset()session_destroy()는 무의미합니다. 사용 session_unset()$ _SESSION 자동 전역, 또는 사용에서 모든 키와 값 취소 session_destroy()전체 세션을 삭제하기를, "확인"을 위해 두 가지를 모두 사용하지 말고 해당 기능을 신뢰할 수 있습니다.
redburn

@redburn session_destroy()은 현재 페이지를 종료 할 때까지 sess 수퍼 글로벌 변수를 설정 해제하지 않습니다.
Yousha Aleayoub
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.