ADODBセッションでmysqliを使いたい


↓ADODBセッション
http://phplens.com/lens/adodb/docs-session.htm

要は

include_once("adodb/session/adodb-session2.php");
ADOdb_Session::config( $driver, $host, $user, $password, $database, $options = false );
session_start();

PHPのセッションデータがDBに保持されるので、webが複数サーバに分散しているときなどは便利です。


対応しているdriverについては、mysql, postgres, oci8 あたりであろうことは想像がつくのですが、特に明記されていません。(ソースを見ると、oci8po, oracle, oci805あたりもいけそう、pdo_* は想定してなさそう。※未検証)



また、デフォルトじゃないポートで立ち上がったMySQLに対してmysqli接続ができませんでした。理由は↓と同じです。
http://d.hatena.ne.jp/yoshihi6/20080201/1201837964
mysqliも想定してなさそうです。

mysql接続のほうは、文字コードセット云々のため使いたくないし、セッション用に別途mysql接続を用意するのも微妙なので、困りました。

解決策として、強引に

    $GLOBALS['ADODB_SESS_CONN'] =& $conn;        // 接続済!

で一見何とかなった風にはなりますが、adodb-session2.php のソースを見たところ、mysql独自の処理が挟まっているので、念のため以下の対処をしました。

  • セッションテーブルは、トランザクション未対応のMyISAM型にする
  • セッションテーブルの列の型を変更
    • VARCHAR ⇒ VARBINARYに
    • LONGTEXT ⇒ LONGBLOBに

・・・

そもそもこれ使っている人ってあまりいないんですかねえ。

EthnaでDBセッション使うと session_save_handler の前で接続が切られてしまったり等もあり、memcachedとか、データをNFSで共有とかが主流なのかなあと感じました。