- ベストアンサー
session_set_save_handler と session_regenerate_id は同時に使えない?
session_set_save_handlerを利用してセッションデータをDBに格納しているのですが、session_regenerate_idを使用するとIDが毎回変わるため、session_set_save_handler での UPDATEやDELETEなどが出来なくなってしまいます。 DELETE FROM session WHERE sid = ".session_id()."の為。 どのようにすれば両方同時に使用できるのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
session_set_save_handler関数は、 設定可能な各、open/close/read/write/destroy/gcに 引数として付加する値がありまして、 writeだった場合は、第一引数にセッションのIDが与えられます。 この値を元に値を格納すればよいのではないかと思いますが、いかがでしょうか。 質問者さんの例文はdestroyなので、destroyの例を下記に。 <?php function _destroy($session_id){ global $DBCON; mysql_query($DBCON, "DELETE FROM session WHERE sid = '".$session_id."'"); return true; } ?> 上記はmysqlを使用している場合の一例です。 session_id関数を参照するのではなく、引数として与えられてきたセッションのIDを参照しています。 また、PHP5.1.0以降をお使いであれば、session_regenerate_id(true)と引数にtrueを入れてやれば、古いセッションはregenerateされたときに削除されることを補足しておきます。 直、そのほかの関数に関して、全体的にどのように書くかは http://yuubiseiharukana.blog.shinobi.jp/Date/20090316/1/ 上記URLのブログのエントリでまとまっておりましたので参考にされると良いかも知れません。