문제

PHP에서 커스텀 세션을 작성하려고합니다. 그러나 어떤 이유로 든 내 세션 만 읽기 functon이 내 세션 쓰기 기능이 아니라 호출됩니다. 따라서 세션은 지속되지 않습니다. 기본 세션 핸들러 (파일)로 다시 전환하면 모든 것이 작동합니다. 내가 추가하면 session_write_close() 테스트 스크립트의 끝에서 - 모든 것이 작동합니다. 그러나 PHP 매뉴얼은 명시 적으로 명시 적으로 전화 할 필요가 없다고 명시하고 있습니다. session_write_close() 스크립트 끝에서 자동으로 호출되기 때문입니다. 그리고 기존 응용 프로그램의 가능한 모든 종료 지점에 session_write_close ()를 넣고 싶지 않습니다!

다음은 문제를 보여주는 몇 가지 코드입니다. WinXP SP3 + Apache 2.2.9 + PHP 5.2.6에서 실행 중입니다. 로그 파일에는 항목 만 포함됩니다 s_open() 그리고 s_read().

<?php
function logger($str)
{
    file_put_contents('session_log.txt', date('Y-m-d h:i:s') . " $str\r\n", FILE_APPEND);
}

function s_open()
{
    logger('s_open');
    return true;
}

function s_close()
{
    logger('s_close');
    return true;
}

function s_read()
{
    logger('s_read');
    return @file_get_contents('session.txt');
}
function s_write($id, $data)
{
    logger("s_write: $id - $data");
    file_put_contents('session.txt', $data);
    return true;
}

function s_destroy()
{
    logger('s_destroy');
    return true;
}

function s_gc()
{
    logger('s_gc');
    return true;
}

session_set_save_handler('s_open', 's_close', 's_read', 's_write', 's_destroy', 's_gc');

session_start();

if ( isset($_SESSION['time']) )
    echo 'Session time: ' . date('Y-m-d h:i:s', $_SESSION['time']);
else
    echo 'Session empty';
echo '<br>';    
echo 'Session ID: ' . session_id();


$_SESSION['time'] = time();
?>
도움이 되었습니까?

해결책

Blargh! PHP 자체가 거기에 두었다는 통지에 사로 잡혔습니다! 매뉴얼을 인용하기 위해 :

경고

스크립트 종료에서 세션이 닫히면 일부 SAPI로 현재 작업 디렉토리가 변경됩니다. 일찍 세션을 닫을 수 있습니다 session_write_close().

그것은 실제로 변화하고 있었고 전화를 받았습니다 s_write() 그리고 s_close() 다른 디렉토리에 로그인되었습니다!

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