2014-04-22 4 views
0

여기에서 보안 세션을 사용하려고합니다. 이것은 연구하는 동안 채택한 코드 조각입니다. 아쉽게도 헤더가 리디렉션 될 때 세션이로드되지 않습니다. 누군가가 무슨 일이 일어나고 있는지 설명하고 올바른 방향으로 나를 가리킬 수 있습니까? 당신이 이전 페이지에서 생성 된 세션을 검색 할 찾고 있다면리디렉션시 PHP 세션이 손실됩니다.

여기 코드

if(!isset($_SESSION)) 
    { 
     $dir_path = ini_get("session.save_path") . DIRECTORY_SEPARATOR . _SESSION_DIR; 
     if(!is_dir($dir_path)) mkdir($dir_path); 

     if(ini_get('session.use_trans_sid') == true) { 
      ini_set('url_rewriter.tags' , ''); 
      ini_set('session.use_trans_sid' , false); 
     } 

     $lifetime = 60 * 60 * 24 * 1; 
     //$lifetime = 60; 
     ini_set('session.gc_maxlifetime' , $lifetime); 
     ini_set('session.gc_divisor' , '1'); 
     ini_set('session.gc_probability' , '1'); 
     ini_set('session.cookie_lifetime' , '0'); 
     ini_set('session.save_path', $dir_path); 
     session_name(_SESSION_NAME); 
     session_start(); 
+0

각 페이지에서'session_id()'의 값을 확인하십시오. 변경되면 세션 쿠키가 손실되고 매번 새롭거나 신선한 세션이 생깁니다. Cookie_path 설정이 잘못되었거나 클라이언트의 쿠키 설정 문제가 원인 일 수 있습니다. –

+0

현재 xampp 및 YES를 사용하는 로컬 시스템에서 작업 중입니다. 매번 session_id가 변경됩니다. 쿠키는 원하는 경로, 즉 xampp/tmp/cookie_name에 생성됩니다. 세션을 리디렉션하기 전에 제대로 작동합니다. 정말로 알고 싶다. 무엇이 내가 여기에 없는지 아는 것 같은 느낌이 든다. – user3561171

답변

0

, 당신은 당신이 당신의 세션을 쓴 후이 session_write_close()을 사용하는지 확인해야합니다. 다음 페이지에서 사용하려면 session_start()BEFORE으로 전화해야합니다. sessions here

+0

은 나를 위해 일하지 않았다. 그래도 그랬 으면 – user3561171

+0

틀렸어. 스크립트가 종료되면 PHP는 세션 데이터를 자동으로 닫거나 저장합니다. session_write_close()는 장기 실행 스크립트에만 필요하며 세션 파일에 유지되는 잠금을 해제해야합니다. 이것이 바로 session_start()의 핵심입니다 : 하나의 호출 (출력 전에)과 PHP가 나머지를 처리합니다. 세션 쿠키 설정이 올바르게 작동하는 한 세션 데이터를 "보존"하기 위해 anythign을 수행 할 필요가 없습니다. –

+0

당신은 그 스크립트가 끝날 때 세션이 맞다.하지만'session_write_close()'전에 리다이렉트가 발생하면 저장하고 읽지 않은 세션을 읽는다. 이것은 또한 php.net [here] (http://us1.php.net/manual/en/function.session-write-close.php#37644)에 대한 코멘트에서 언급됩니다. 나는 당신이 @MarcB가 틀렸다는 것을 말하지 않고 있지만, 상황을 고려할 때 이것이 문제를 해결할 것이라고 생각했다. – Mic1780

관련 문제