[PHP-users 25452] セッションの読み書きのタイミングがおかしい

石井真介 bbswx419 @ ybb.ne.jp
2005年 4月 25日 (月) 00:15:41 JST


石井と申します。

PHP4.3.10を使って、セッションを用いた
プログラムの実装をしているのですが、
セッションの読み書きのタイミングがおかしいという現象に遭遇しました。

状況ですが、以下の2つのファイルがあり、

 SessionLib.php ・・・ セッション関数の定義しています。
 SessionTest.php ・・・ (セッション関数を呼び出し使っています。

まず、SessionLib.php のソースは以下のようになっています、

--- SessionLib.php -----------------------------

  session_set_save_handler(
  'my_sess_open',
  'my_sess_close',
  'my_sess_read',
  'my_sess_write',
  'my_sess_destroy',
  'my_sess_gc' );

  function my_sess_open(param1, param2){
    // DBコネクションの取得
  }

  function my_sess_close(){ //省略 }
  function my_sess_read(param1, param2){
    // DBからデータを取得
  }
  function my_sess_write(param1, param2){
    // DBにデータを登録
  }
  function my_sess_destroy(){ //省略 }
  function my_sess_gc(){ //省略 }

---------------------------------------------

そして、SessionTest.php でセッション関数を使っているのですが、
問題なのは、

session_start(); を呼ぶと、
my_sess_open関数だけでなくmy_sess_read関数も呼ばれてます。

また、session_start();の後に、
if( isset($_SESSION['var']) ){} や $_SESSION['var']
を呼ぶと、my_sess_write関数が呼ばれます。


# 私の考えでは、
# $_SESSION['var'] とするとmy_sess_read関数が呼ばれ
# $_SESSION['var'] = test とするとmy_sess_writeが呼ばれる
# という認識を持っています。
# この認識が間違っているのでしょうか?

この不具合の解決策をご存知の方がいらっしゃいましたら、お教え下さい。


以上、宜しくお願い致します。



PHP-users メーリングリストの案内