2016-11-28 1 views
0

아주 간단한 실험. 커스텀 세션 ID로 PHP 세션을 영속적으로 유지하는 방법?

if (!isset($_SESSION)) { 
    session_id(random_string()); 
    session_start(); 
} 

echo session_id(); 

random_string()

단순히 무작위로 20 문자 A-Z, A-Z, 0-9 문자열을 반환 : 나는이 포함 된 index.php 있습니다.

if 문 앞에 session_start()에 대한 호출이 존재하지 않기 때문에 항상 새로운 세션 ID를 생성합니다이 페이지를 다시로드에

, 그리고 존재하지 않는 슈퍼 세계적인 (재개) $_SESSION. 내가 스크립트의 상단에 session_start()에 전화를 넣어 경우

그러나, 나는 사용자 정의 ID를 설정하기 때문에session_start() 호출하기 전에 를 발생하는 사용자 지정 세션 ID를 지정하는 내 기회를 잃었습니다.

나는 이것을 이해할 수 없다. 닭고기/달걀 문제. 그렇다면 페이지로드간에 슈퍼 글로벌을 유지할 수있는 사용자 정의 세션 ID를 어떻게 성공적으로 구현합니까?

+0

PHP 세션은 신뢰할 만하지 않습니다. 세션에 데이터베이스를 사용하는 것이 좋습니다. – khuderm

+0

그래서 브라우저를 닫을 때까지 또는 사용자별로 동일한 세션 ID를 유지하고 싶습니까? – Perumal

답변

0

파일 시스템 및 데이터베이스의 도움을 받아 페이지 전체에서 사용자 정의 된 세션 ID를 가질 수 있습니다. 나는 파일 시스템 방법을 사용하여 모든 페이지를 통해 동일한 세션 ID를 추적하려면 다음 코드를 작성했습니다 :이 코드가 얼마나 효율적으로 잘 모르겠어요

if(filesize('session_track.txt') === 0) { 
    file_put_contents('session_track.txt', random_string()); 
} 

$session_id = file_get_contents('session_track.txt'); 
session_id($session_id); 
session_start(); 

// Here is the conditional statement, in case you need to regenerate your custom session id again 
$regenerate_custom_session_id = false; // if need, set it to true. 

// This code depends on your requirements. I just mentioned this conditional statement for your understanding to make it logically work 
if($regenerate_custom_session_id === true) { 
    file_put_contents('session_track.txt', ''); 
} 

. 방금 작동하도록 아이디어를 공유했습니다.

관련 문제