6

Zend Sessionsを使用してデータベースにセッションを保存しようとしていますが、何らかの理由でセッションが終了します。これを実行するコードが実行されているかどうか、またはそれが他の何かであるかどうかはわかりません。

ログインしてからしばらくすると、セッションIDが再生成されたように見えることに気づきました。

これは、私のhtaccessファイルに次の行を追加したにもかかわらずです。

php_value session.auto_start 0

最終的には、ログインするたびにログアウトします。

ブートストラップファイルのコードは次のとおりです

$config = array(
    'name'           => 'session',
    'primary'        => 'id',
    'modifiedColumn' => 'modified',
    'dataColumn'     => 'data',
    'lifetimeColumn' => 'lifetime'
);


$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
Zend_Session::rememberMe($seconds = (60 * 60 * 24 * 30)); 

$saveHandler->setLifetime($seconds)->setOverrideLifetime(true); 

Zend_Session::setSaveHandler($saveHandler);
//start your session!
Zend_Session::start();

ログイン時にZend_Authを除いて、他のセッション関連の関数を使用していません。

InfactremembermeはSessionクラスのregenerateID関数を呼び出します。その結果、私は数分ごとに常にログアウトしています。

4

4 に答える 4

5

セッションを開始する前にrememberMeを呼び出しているため、この問題が発生している可能性があると思います。

最初にセッションを開始する必要があります。そうしないと、rememberMeの時間を設定するためのセッションが必要になるため、rememberMeは何もしません。

RememberMeはregenerateId関数を呼び出し、Idの再生成は実際にセッションが存在するために必要なものです。

セッションの開始後にrememberMe呼び出しを行い、それがどのように機能するかを確認します。

そうでない場合は、私のコードがあなたのコードに似ているので、それが何であるかわかりません。

于 2011-05-11T11:43:08.950 に答える
5

このようなことを試しましたか?

protected function _initSession() {
    $config = array(
        'name'  => 'session',
        'primary'  => 'id',
        'modifiedColumn' => 'modified',
        'dataColumn' => 'data',
        'lifetimeColumn' => 'lifetime',
        'lifetime' => 60*60*24*30,
    );

    Zend_Session::setSaveHandler(new F_Session_SaveHandler_DbTable($config));        
}

このように、データベースセッションの初期化後に有効期間は設定されませんが、初期化オプションに直接含まれています-私にとってはうまくいきます.あなたのケースでこれが失敗する理由はわかりません:)

于 2011-05-11T11:47:44.373 に答える
2

ブートストラップ コードの後で次の値を一度調べる必要があると思います

session.gc_maxlifetime
session.cookie_lifetime
于 2011-06-01T09:37:58.943 に答える