アプリ版:「スタンプのみでお礼する」機能のリリースについて

session_set_save_handlerを利用してセッションデータをDBに格納しているのですが、session_regenerate_idを使用するとIDが毎回変わるため、session_set_save_handler での UPDATEやDELETEなどが出来なくなってしまいます。

DELETE FROM session WHERE sid = ".session_id()."の為。

どのようにすれば両方同時に使用できるのでしょうか?

A 回答 (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/200 …
上記URLのブログのエントリでまとまっておりましたので参考にされると良いかも知れません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!