状態:-
閲覧数:1,799
投稿日:2016-04-01
更新日:2016-04-19
ユーザ定義セッションハンドラを実装
使用すると?
・標準のセッションハンドラが対応していないストレージへセッション情報を保存可能
MySQL へ保存する場合、メソッドをどのように実装するの?
<呼ばれる順番>
・open - 何もしない
・read - セッションID をキーにしてデータを読み込んで string で返す
・write - セッションID とデータが渡されるので保存
・close - 何もしない
・gc - 期限切れのセッションデータを削除
・destroy - セッションID をキーにして値をストレージから削除
セッション更新日時を保存する理由
・session.gc_maxlifetimeを過ぎたセッションを削除するため
セッションに 関連するデータを保存および取得するために使用されるユーザー定義の セッション保存関数を設定
・この関数は、セッションデータを ローカルデータベースに保存する場合のように PHP セッションにより 提供されるもの以外の保存方法を使用したい場合に有用
パラメータ
・この関数には二種類のプロトタイプが存在
A.PHP 5.4.0 以降
B.PHP 5.4.0 未満
使用すると?
・標準のセッションハンドラが対応していないストレージへセッション情報を保存可能
MySQL へ保存する場合、メソッドをどのように実装するの?
<呼ばれる順番>
・open - 何もしない
・read - セッションID をキーにしてデータを読み込んで string で返す
・write - セッションID とデータが渡されるので保存
・close - 何もしない
・gc - 期限切れのセッションデータを削除
・destroy - セッションID をキーにして値をストレージから削除
セッション更新日時を保存する理由
・session.gc_maxlifetimeを過ぎたセッションを削除するため
session_set_save_handler()
セッションに 関連するデータを保存および取得するために使用されるユーザー定義の セッション保存関数を設定
・この関数は、セッションデータを ローカルデータベースに保存する場合のように PHP セッションにより 提供されるもの以外の保存方法を使用したい場合に有用
パラメータ
・この関数には二種類のプロトタイプが存在
A.PHP 5.4.0 以降
bool session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] )
B.PHP 5.4.0 未満
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid ] )
A.session_set_save_handler ( $open , $close , $read , $write , $destroy , $gc [, $create_sid ] )
構文
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid ] )
第1引数
セッションのオープン時に実行される関数
・コンストラクタのようなもの
callable $open(string $savePath, string $sessionName)
・セッションを開くときに実行される・セッションが自動で開始したり、あるいは手動で session_start() で開始させたりするときに、最初に実行されるコールバック関数
・成功した場合は TRUE、失敗した場合は FALSE を返す
第1引数 … $savePath
・サ-バ側のセッション保存ディレクトリパス
/var/opt/remi/php70/lib/php/session
第2引数 … $sessionName・セッション名
PHPSESSID
第2引数
セッションのクローズ時に実行される関数
・デストラクタのようなもの
callable $close()
・ページから抜けるとき、呼ばれる第3引数
セッションの読み込み時に実行される関数
・セッションIDをキーにしてセッション情報を取得する処理を書く
callable $read(string $sessionId)
・ストレージから $_SESSION へ値が読み込まれる
・read コールバックは、セッションが開始したときや session_start() がコールされたときに PHP が内部的に実行する
・このコールバックを実行する前に、PHP は open コールバックを実行する
・このコールバックは、常にセッションエンコード (シリアライズ) された文字列を返さなければならない
・何もデータを読み込まなかった場合は空文字列を返す
・このコールバックが返す値は、 write コールバックがストレージに渡した形式とまったく同じシリアライズ形式でなければならない
・返された値を PHP が自動的にアンシリアライズして、スーパーグローバル $_SESSION に格納する
・データ形式は serialize() したものと似ているが、実際は違う形式であることに注意
・シリアライズの方法は ini 設定 session.serialize_handler で指定
第1引数
・セッションID
r85uvmetobeedohbrnln158e56
第4引数
セッションの書き込み時に実行される関数
・セッションIDをキーにしてセッション情報を更新する処理を書く
callable $write(string $sessionId, string $data)
・ページから抜けるとき、呼ばれる
・セッションの保存や終了が必要となったときにコールされる
・このコールバックが受け取るのは、現在のセッション ID とシリアライズ後のスーパーグローバル $_SESSION
・PHP が内部で利用するシリアライズ方法は、ini 設定 session.serialize_handler で指定
第5引数
セッション破棄時に実行される関数
・セッションIDをキーにしてセッション情報を削除する処理を書く
callable $destroy($sessionId)
・セッションを破棄する場合 (session_regenerate_id() に true を渡して呼び出した場合や session_destroy() を明示的に呼び出した場合) 及び session_decode() が失敗したときに呼び出される・destroy にはセッション ID が渡されるので、それをキーとしてストレージ内のセッションデータを破棄
第6引数
ガベージコレクション実行時に実行される関数
・maxlifetime以上経過しているセッションを削除する処理を書く
callable $gc($lifetime)
・session_start() 内で PHP システムから呼び出される・このとき PHP 設定の session.gc_maxlifetime にセットした値が渡される
・ここで期限切れになった古いセッションデータのクリーンアップを行なう
gc は毎回呼び出されるわけではない
・PHP 設定の session.gc_divisor と session.gc_probability の値でおよその値が決定
・session.gc_divisor に 1000、session.gc_probability に 1 が設定されていれば session_start() を呼び出した 1000回に 1 度(位の)割合で gc が呼び出される[/color]