質問

PHPでカスタムセッション永続性を記述しようとしています。しかし、何らかの理由で、セッション書き込み関数ではなく、セッション読み取り関数のみが呼び出されます。したがって、セッションは永続化されません。デフォルトのセッションハンドラー(ファイル)に戻すと、すべてが機能します。テストスクリプトの最後に 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(

PHPでカスタムセッション永続性を記述しようとしています。しかし、何らかの理由で、セッション書き込み関数ではなく、セッション読み取り関数のみが呼び出されます。したがって、セッションは永続化されません。デフォルトのセッションハンドラー(ファイル)に戻すと、すべてが機能します。テストスクリプトの最後に session_write_close()を追加すると、すべてが機能します。ただし、PHPマニュアルでは、 session_write_close()を明示的に呼び出す必要はないことが明示されています。これは、スクリプトの最後に自動的に呼び出されるためです。そして、既存のアプリケーションの可能なすべての出口点にsession_write_close()を置きたくありません!

問題を説明するコードを次に示します。 WinXP SP3 + Apache 2.2.9 + PHP 5.2.6で実行しています。ログファイルには、 s_open()および s_read()のエントリのみが含まれます。

<*>SESSION['time']) ) echo 'Session time: ' . date('Y-m-d h:i:s',

PHPでカスタムセッション永続性を記述しようとしています。しかし、何らかの理由で、セッション書き込み関数ではなく、セッション読み取り関数のみが呼び出されます。したがって、セッションは永続化されません。デフォルトのセッションハンドラー(ファイル)に戻すと、すべてが機能します。テストスクリプトの最後に session_write_close()を追加すると、すべてが機能します。ただし、PHPマニュアルでは、 session_write_close()を明示的に呼び出す必要はないことが明示されています。これは、スクリプトの最後に自動的に呼び出されるためです。そして、既存のアプリケーションの可能なすべての出口点にsession_write_close()を置きたくありません!

問題を説明するコードを次に示します。 WinXP SP3 + Apache 2.2.9 + PHP 5.2.6で実行しています。ログファイルには、 s_open()および s_read()のエントリのみが含まれます。

<*>SESSION['time']); else echo 'Session empty'; echo '<br>'; echo 'Session ID: ' . session_id();

PHPでカスタムセッション永続性を記述しようとしています。しかし、何らかの理由で、セッション書き込み関数ではなく、セッション読み取り関数のみが呼び出されます。したがって、セッションは永続化されません。デフォルトのセッションハンドラー(ファイル)に戻すと、すべてが機能します。テストスクリプトの最後に session_write_close()を追加すると、すべてが機能します。ただし、PHPマニュアルでは、 session_write_close()を明示的に呼び出す必要はないことが明示されています。これは、スクリプトの最後に自動的に呼び出されるためです。そして、既存のアプリケーションの可能なすべての出口点にsession_write_close()を置きたくありません!

問題を説明するコードを次に示します。 WinXP SP3 + Apache 2.2.9 + PHP 5.2.6で実行しています。ログファイルには、 s_open()および s_read()のエントリのみが含まれます。

<*>SESSION['time'] = time(); ?>
役に立ちましたか?

解決

ブラー! PHP自体がそこに置いていることに気づきました!マニュアルを引用するには:

  

警告

     

スクリプトの終了時にセッションが閉じられると、現在の作業ディレクトリが一部のSAPIで変更されます。 session_write_close()を使用して、以前にセッションを閉じることができます。

実際に変更され、 s_write()および s_close()の呼び出しは別のディレクトリに記録されました!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top