PHP bir özel oturum persister yazmaya çalışıyorum. Ama nedense sadece benim oturum okuma functon değil benim oturum yazma fonksiyonu denir oluyor. Böylece oturum kalıcı değildir. Ben varsayılan oturum işleyici (dosya) dönerseniz, her şey çalışıyor. Ben test script sonunda session_write_close()
eklerseniz - her şey çalışıyor. Ama PHP kılavuzu açıkça otomatik script sonunda çağrılır çünkü açıkça session_write_close()
aramak gerekmez belirtiyor. Ve benim mevcut uygulamada her türlü çıkış noktasında) (session_write_close koymak istemiyorum!
Burada sorunu göstermektedir bazı kod. Ben WinXP SP3 + Apache 2.2.9 + PHP 5.2.6 üzerinde çalışan ediyorum. Günlük dosyası s_open()
ve s_read()
için girdileri içerir.
<?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();
?>