2011-04-25 3 views
10

내 웹 사이트에서 사용자를 로그 아웃하려면 페이지를 logout.php으로 리다이렉션하고 있습니다. 여기서 session_destroy() 함수를 사용하고 있습니다. 심지어 거기에, 로그 아웃 기능은 session_start() 기능 없이는 작동하지 않습니다. session_destroy() 함수 앞에 session_start() 함수를 추가하여 사용자를 성공적으로 로그 아웃 할 수 있습니다.PHP session_start() 함수 : PHP 세션과 관련된 것을 사용할 때마다 왜 필요합니까?

언제든지 session_start() 기능을 사용해야하고 세션과 관련된 모든 페이지에서 기능을 사용해야하는 이유는 무엇입니까?

답변

12

session_destroy()는 활성 세션을 삭제합니다. 세션을 초기화하지 않으면 파손되지 않습니다.

+1

로그인 한 사용자 만 페이지를 볼 수있는 각 페이지마다 세션을 초기화해야합니까? 나는 session_start()를 호출함으로써 모든 페이지가 세션 변수가 있다는 것을 알게되었다고 생각했다. –

+1

물론입니다. 요청시 세션을 다루는 경우 session_start()를 호출하여 PHP에 세션 정보를 제공해야합니다. –

+0

또는 session.auto_start = 1을 사용할 수 있습니다 (모범 사례는 아니지만 가능합니다). – alexglue

12

세션과 관련된 작업을 수행 할 때마다 매번 session_start() 함수를 사용해야하는 이유는 무엇입니까?

그래서 PHP는 어떤 세션을 삭제할 것인지를 알고 있습니다. session_start()은 세션 쿠키 또는 ID가 있는지 여부를 확인합니다. 그 정보 만 가지고 당신은 그것을 파괴 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 둘 이상의 세션을 만들 수 있습니까? 예를 들어, session_start() 함수를 4 번 호출합니다. 그것은 4 세션을 생성합니까? –

+2

단일 세션 만 만들고있는 것 같습니다. 후속 session_start() 호출에 다른 세션 ID를 지정하지 않으면 첫 번째 session_start()를 호출 한 후 원래 세션 ID (사용자 쿠키 또는 URL에 저장 됨)가 기본값으로 설정됩니다. –

+0

@iSumitG @ 존이 말한 것. 세션을 두 번 이상 시작한다고해서 오류가 발생한다고 생각합니다. 처음에는 이해가 안됩니다. –

3

기본 구성에서 PHP 세션은 하드 디스크로 작동합니다. PHP는 불필요한 디스크 입출력을 피하기 위해이 지원이 필요할 때이를 명시 적으로 요구합니다.

session_start() 또한 PHP가 사용자의 세션이 있는지를 알려줍니다.

3

으로 session_start()는 세션을 생성하거나 쿠키를 통해 GET 또는 POST 요청 통해 통과하거나 통과 세션 식별자에 기초하여 상기 현재 재개.

session_start()를 호출하여 본질적으로

http://php.net/manual/en/function.session-start.php 당, PHP는 헤더와 상호 참조 시스템에 무엇에 세션 ID를 읽고 (파일 시스템/데이터베이스/등), 다음 $_SESSION을 채울 수있는 그 특정 사용자와 관련이 있습니다. 실제로 어떤 세션이 실제로 파괴되는지 알고 있기 때문에 session_destroy()에 전화 할 수 있습니다.

0

PHP 엔진을 말하는 방법으로 session_start()를 고려해보십시오. 세션을 가지고 작업하고 싶습니다.

나는 그것을 이해하기 때문에 항상 PHP 페이지에서 첫 번째 라인이되도록하십시오.

0

나는 session_start()를 혼동했다. 세션 변수를 사용할 때마다 session_start를 호출하고있었습니다. 정확하게, 나는 session_start()를 가졌다; 각 페이지에서 두 번 이상 (심지어 session_destroy() 호출하지 않고). 예 :

// 1st call 
session_start(); 

if (!isset($_SESSION['UserID']))  
{  
    // Do something  
} 

else 
{ 
    // Do something else 
} 

// .... some other code 

// 2nd call 
session_start(); 

if (!isset($_SESSION['UserID']))  
{  
    // Do something totally different 
} 

else 
{ 
    // Do something else totally different 
} 

성능 문제가 발생했습니다. 그래서 나는 페이지의 맨 꼭대기에 session_start();을 한 번만 불렀고 모든 것이 잘 작동하는 것처럼 보입니다.

0

은 한 번 (한 번만)마다에 있어도 session_start를 호출하면 세션에서 작업 할 수 있습니다.

일반적인 방법을 한 번만 호출 색인과 같은 디스패처 파일을 가지고하는 것입니다 수 있도록 원하는 파일을해야합니다.PHP; 여기에 session_start를 호출하고이 페이지에 url의 $ _GET을 기반으로 다른 페이지를 포함 시키십시오.

<?php 
    session_start(); 
    if(isset($_GET['page']) && file_exists('pages/'.$_GET['page'].'.php') { 
     include $_GET['page']; 
    } 
?> 
//www.mysite.com/index.php?page=fish will display /pages/fish.php with session access