ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 13 years ago

Closed 13 years ago

Last modified 13 years ago

#1749 closed enhancement (fixed)

PEAR::Authをバージョンアップする

Reported by: ebihara Owned by: nobody
Priority: major Milestone: OpenPNE2.11.3
Component: pne-admin Version:
Keywords: Cc:

Description (last modified by ebihara)

■概要

PEAR::Authをバージョンアップする

■仕様

  • PEAR::Authを1.3.0から1.5.4にバージョンアップする
  • session_registar() を使用しない形に変更されているので注意する

■関連情報

Change History (6)

comment:1 Changed 13 years ago by ebihara

Owner: changed from nobody to ebihara
Status: newassigned

単純にコードをアップデートするだけだと、ログイン操作をおこなった場合に、以下のようなエラーメッセージを出力した上で、ログイン画面に戻ってしまいました。

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in /example.com/webapp/lib/OpenPNE/Auth.php on line 12

原因については現在調査中です。

comment:2 Changed 13 years ago by ebihara

Owner: changed from ebihara to nobody
Status: assignednew

PEAR::Authの1.3.1で以下の変更がありました。

* Fixed Bug #7860: Removed deprecated session_register call.

1.3.1時点でのコードは以下です。

        // Make Sure Auth session variable is there
        if(   !isset($_SESSION[$this->_sessionName]) 
           && !isset($GLOBALS['HTTP_SESSION_VARS'][$this->_sessionName])) {
            isset($_SESSION)
                ? $_SESSION[$this->_sessionName] = array()
                : $GLOBALS['HTTP_SESSION_VARS'][$this->_sessionName] = array();
        }

最新安定版 1.5.4 でも大して変わっておらず、以下のようになっています。

        // Make Sure Auth session variable is there
        if(!isset($_SESSION[$this->_sessionName])) {
            session_register($this->_sessionName);
        }

ところが、ここでOpenPNEが使用している 1.3.0 のとおり session_register() を使わないと、OpenPNEへのログイン時に

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in /example.com/webapp/lib/OpenPNE/Auth.php on line 12

が出てしまいます(事実、 1.5.4 でも session_register() を使うようにすれば動作する)。

動きを追ってみたのですが、どうも webapp/lib/auth.inc 14行目 の $auth->auth(); で false が返ってきてしまっているようです。どうしてかというと、PEAR::Auth の checkAuth() が false を返してしまっているからなのですが、どうして session_register() を使えば true になるのか、よく判りませんでした。

ちょっと9日のリリースに間に合わせるのは難しそうです。手放します。

comment:3 Changed 13 years ago by ebihara

Keywords: 確認中 added

session_start()がされていない状態でsession_destory()がコールされていたのが原因なので、OpenPNE::factory()で強制的にsession_start()をコールすることで対処しました(二回目以降のsession_start()はNOTICEエラーを吐いて無視するだけなので)。

r4883で対応しました。御確認下さい。

comment:4 Changed 13 years ago by ogawa

Keywords: 確認中 removed
Resolution: fixed
Status: newclosed

comment:5 Changed 13 years ago by ebihara

Description: modified (diff)

comment:6 Changed 13 years ago by ebihara

Version: 2.11.x
Note: See TracTickets for help on using tickets.