関数の概要
session_commit は、PHPのセッションデータを現在のリクエストで書き込み、セッションを終了させるための関数です。通常、セッションの変更はスクリプトの終了時に自動で保存されますが、session_commit を使うことで、明示的にセッションデータの保存とロックの解除を行えます。
パラメータの説明
session_commit()は引数を取りません。
戻り値
正常に処理が完了すれば true を返し、失敗すると false を返します。
使用例
基本的な使い方
<?php
session_start();
$_SESSION['user'] = 'tanaka';
session_commit();
?>
セッションを開始し、値をセットした後に session_commit を呼ぶことで、即座にセッションの保存とロック解除を行います。
複数処理間でセッションを分割するとき
<?php
session_start();
$_SESSION['count'] = ($_SESSION['count'] ?? 0) + 1;
session_commit();
// 重い処理や外部API呼び出しなど
sleep(3);
session_start();
$_SESSION['last_access'] = time();
session_commit();
?>
重たい処理を行う前にセッションをコミットしてロックを開放し、後で再度セッションを開始して別の値を更新しています。これにより、他のリクエストのブロックを防げます。
セッションを保存してスクリプトを継続する
<?php
session_start();
$_SESSION['step'] = 2;
if (session_commit()) {
echo 'セッションデータを保存しました。';
}
// ここからはセッションロックなしで処理を続行可能
sleep(2);
echo '処理完了';
?>
セッションの変更を確実に保存し、ロックを解除してから長時間処理を継続したい場合に有用です。
関連する関数
session_start(): セッションを開始するsession_write_close(): セッションを書き込み終了する(session_commit()のエイリアス)session_destroy(): セッションデータを破棄するsession_save_path(): セッションファイルの保存先を取得・設定する
まとめ
session_commit は、PHPのセッションデータを手動で書き込み、セッションのロックを解除するために使います。複数の処理が同じセッションを扱う場合や、重たい処理の前にセッションロックを解除したい際に役立ちます。session_write_close() と同じ動作をし、引数は不要です。実務ではセッションの競合を避けるために積極的に使うことが推奨されます。
