スレッド表示 | フラット表示〕 全トピック 920 件中 116 番目 次≫ ≪前

session_set_save_handlerについて

created: 2007-04-25 19:51 | modified: 2007-04-27 14:28 | reply: 2

[3720] session_set_save_handlerについて

user: 迷子のぽち | created: 2007-04-25 19:51
はじめまして。
session_set_save_handler関数に引数として設定する関数ついて質問させてください。

この関数に設定する、open用の処理に設定する関数の引数は、$save_path, $session_nameの2つのようです。
この引数からこの関数の中でセッションIDを取得することは可能でしょうか?

普通のプログラム内からだと、セッションIDは、
$id = session_id();
で取得すればよいのだと思うのですが、
sessionを設定する(この書き方が正しいのかは判断しかねますが)この関数の中では、どうしたらよいのかわからずにいます。

セッション用のDB(mysql)サーバを複数台予定しているので、セッションIDをもとにDBの接続先を設定したいのですが、
上記がわからないため、現在は、read,write,destroy用の処理用の関数の中で、それぞれDBを接続するプログラムになっています。
(各処理用の関数には、idが引数でわたってくるようなので)

できればOPEN用の処理関数の中で、セッションIDを取得してDBへの接続を確立し、一度の接続にしてしまいたい、と考えています。

sessionやcookieの処理は得意ではないので、説明自体がわかりにくい書き方かもしれません。
どなたかご存知の方がいらっしゃいましたら、教えていただけますでしょうか?
よろしくお願いいたします。
reply: 3724 返信 編集 削除

[3724] DBへの接続とセッション

user: ゆうじ | created: 2007-04-26 02:05
こんばんわ。

openメソッドの中で session_id() は使えませんでしたか。
使えなければ $_COOKIE[session_name()] でも得られると思います。

もしDBの接続切り替えがセッションの為だけならば、
openメソッドの中で行うのがベターかもしれませんが、
他のデータもその接続先のDBと連動してるなら、
session_start前に、$_COOKIE[session_name()] でひろった
idを元にDBのコネクション確立してどこかに保持しておき
各処理でそれを参照する手もありかと思います。

DBのコネクションは思いのほか負荷が高いらしいので
この方がより省エネになるとおもいます。
Parent: 3720  reply: 3731 返信 編集 削除

[3731] session_set_save_handlerの位置について

user: 迷子のぽち | created: 2007-04-27 14:28
ゆうじさん、アドバイス、ありがとうございます。
途方にくれかけていたので、とても助かりました。

私の認識では、session_set_save_handler関数は、下記のようにsession_start関数の前に呼ばれるものと認識していました。

session_set_save_handler( "OpenHandler", "CloseHandler", "ReadHandler", "WriteHandler", "DestroyHandler", "GcHandler");
session_start();

なので、ご提案いただいた、『session_id()』と、『$_COOKIE[session_name()]』が使用できるのかどうかが
わからなかったのですが、下記のようにプログラムを書いて実行してみたら、値が取得できているようです。
(何故『session_start()』の前に使用できるのかは不明ですが。。。汗。)

-----プログラム-----
function OpenHandler($path, $name) {

debuglog("-----[OpenHandler] start-----");
debuglog("name" . $name );

// COOKIEからIDを取得してみる
if( isset( $_COOKIE[$name] ) ) {
debuglog( "ID FROM COOKIE = " . $_COOKIE[$name] );
}
else {
debuglog( "ID FROM COOKIE get failed!");
}

// session関数を使用してみる
if( session_id() ) {
debuglog( "ID FROM SESSION_ID_FUNC = " . $_COOKIE[$name] );
}
else {
debuglog( "ID FROM SESSION_ID_FUNC get failed!");
}

if( isset( $_COOKIE[session_name()] ) ) {
debuglog( "ID FROM COOKIE_SESSION_NAME_FUNC = " . $_COOKIE[session_name()] );
}
else {
debuglog( "ID FROM COOKIE_SESSION_NAME_FUNC get failed!");
}

debuglog("-----[OpenHandler] end-----");

return true;
}

session_set_save_handler( "OpenHandler", "CloseHandler", "ReadHandler", "WriteHandler", "DestroyHandler", "GcHandler");
session_start();

-----実行結果-----
-----[OpenHandler] start-----
name○○○
ID FROM COOKIE = ××××
ID FROM SESSION_ID_FUNC = ××××
ID FROM COOKIE_SESSION_NAME_FUNC = ××××
-----[OpenHandler] end-----

引き続き、調査・検討を続けようと思いますが、とりあえず、引数として確実にわたってくる$nameを使用して、$_COOKIE[$name]が定義されていたら、そこからIDを取得して接続、という方法をとってみようかと思います。
(本当は、session_idとして、正確なものを取得できれば一番いいとは思うのですが。。。)
またこの件に関して、何かわかったことがあったらご報告させていただきます。
ありがとうございました。
Parent: 3724  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 116 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑