| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
session_set_save_handler(PHP 4, PHP 5, PHP 7) session_set_save_handler — ユーザー定義のセッション保存関数を設定する 説明
bool session_set_save_handler
( callable
$open
, callable $close
, callable $read
, callable $write
, callable $destroy
, callable $gc
[, callable $create_sid
[, callable $validate_sid
[, callable $update_timestamp
]]] )PHP 5.4 以降は次のプロトタイプでも登録できます。
bool session_set_save_handler
( SessionHandlerInterface
$sessionhandler
[, bool $register_shutdown = true
] )session_set_save_handler() は、セッションに 関連するデータを保存および取得するために使用されるユーザー定義の セッション保存関数を設定します。この関数は、PHP セッションにより 提供されるもの以外の保存方法を使用したい場合に有用です。 例えば、セッションデータをローカルデータベースに保存します。 パラメータこの関数には二種類のプロトタイプがあります。
返り値
成功した場合に 例
例1 自作のセッションハンドラ: 完全なコードは SessionHandlerInterface を参照 このコードは、PHP 5.4.0 以降のバージョンで動作します。 ここでは実行するところだけを示します。完全な例は、上でリンクしている SessionHandlerInterface のページを参照ください。 session_set_save_handler() でオブジェクト指向型のプロトタイプを使っていることと、 シャットダウン関数をその parameter フラグで登録していることに注目しましょう。 オブジェクトをセッション保存ハンドラとして使うときには、この方法をおすすめします。
<?php 例2 セッション保存ハンドラでオブジェクトを使う例 このコードは、PHP 5.4.0 より前のバージョンで動作します。
この例では、ファイルベースのセッションストレージをつくります。これは
PHP のデフォルトのセッション保存ハンドラである シャットダウン関数 session_write_close() を、 register_shutdown_function() を使って追加登録していることに注目しましょう。 PHP 5.4.0 より前のバージョンでオブジェクトをセッション保存ハンドラとして使うときには、この方法をおすすめします。
<?php 注意警告
オブジェクトをセッション保存ハンドラとして使うときには、
シャットダウン関数を PHP に登録しておくことが重要です。
これで、PHP スクリプトの終了時に内部的にオブジェクトを破棄する処理による副作用や、
PHP 5.4.0 以降では session_register_shutdown() を使えます。あるいは session_set_save_handler() をオブジェクト指向のメソッドとして実行するときに 'register shutdown' フラグを使い、SessionHandlerInterface を実装したインスタンスを渡すという方法もあります。 警告
PHP 5.0.5 以降、 この「ニワトリが先かタマゴが先か」の問題を解決するために、 デストラクタから session_write_close() をコールできますが、より確実なのは先述のとおりシャットダウン関数を登録することです。 警告
SAPI の種類によっては、スクリプトの終了時にセッションを閉じると 現在の作業ディレクトリが変わってしまうことがあります。これを防ぐには、 事前に session_write_close() でセッションを閉じます。 変更履歴
参考
|
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「session_set_save_handler - ユーザー定義のセッション保存関数を設定する」をGoogle検索
|