session_set_save_handler()
をphp5に使用するphp4アプリケーションを移行する必要があります。php4からphp5へのコールバックによるセッションの移行奇妙な動作
php4ではすべて問題ありませんでしたが、php5ではコールバック関数がグローバル変数にアクセスできなくなりました。これはsession_set_save_handler()
が呼び出される前にページに設定されていました。グローバル変数$ G1以下の例では
はsession_writer()
にアクセスすることはできません(コールバック関数として渡される)
は、この動作のためのいくつかの説明があります。また、コールバックとのセッションの移行のヒントを与えることができますphp4から5へ?これは実際documentationに留意されたい
function session_writer($id,$vars) {
global $g1;
echo "g1 not defined here: ".is_object($g1);
}
global $g1;
$g1 = SomeObject(); //which is the DB connection for the session writer
session_set_save_handler($o,$c,$r,"session_writer",$d,$g);
session_start();
ありがとう、私はここで何が起こっているのか把握し始めています。 SomeObject()は私のデータベースです。だから私はリファクタリングし、session_writer自体にDBオブジェクトの作成をコピーすることができます、これは最も簡単でしょうか? – user89021
いいえ、オブジェクトを破壊する前にセッションの書き込みを強制しない限り、実際にはオブジェクトを使用できません。私が言ったように、いくつかのオブジェクトデストラクタからsession_write_close()を呼び出すか、shutdown関数として登録する必要があります。 – molf