PHP session_set_save_handler () ile garip bir sorun

1 Cevap php

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();
?>

1 Cevap

Blargh! PHP kendisi oraya koymuştu bir sürede yakalandılar! Manuel alıntı:

Warning

Oturum komut fesih kapalı ise geçerli çalışma dizini bazı SAPI'lerinin ile değiştirilir. Bu session_write_close() ile önceki oturumu kapatmak mümkündür.

Gerçekten değişen ve s_write() ve s_close() başka bir dizinde günlüğe için çağrı! Edildi