25

したがって、この質問の核心は、CakePHPが非アクティブな期間の後にのみセッションの認証を解除するのを防ぐ方法です。

したがって、ユーザーが何もしなかった場合、CakePHPは30分後にログアウトすることを期待しています。ただし、ユーザーが非アクティブの28分のページにアクセスすることを選択した場合、CakePHPはタイムアウトカウンターを「リセット」する必要があります。

これは現在発生していません。アクティビティに関係なく、CakePHPはコア構成(app / Config / core.php)で指定された時間が経過するとタイムアウトになります。

これが私の設定コードです:

Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => '30'
));

何か案は?

4

5 に答える 5

28

同じ問題に遭遇した後、これは Session.cookieTimeout 値が原因であることがわかりました。PHP セッションはまだ有効でしたが、セッション Cookie の有効期限は更新されません。

これが私のセッション設定です

Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 30, // The session will timeout after 30 minutes of inactivity
        'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts
        'checkAgent' => false,
        'autoRegenerate' => true, // causes the session expiration time to reset on each page load
    ));
于 2013-05-21T10:19:12.197 に答える
8

ページビューごとにtimeout値がリセットされるため、必要な「非アクティブ タイムアウト」が提供されますが、ブラウザのセッション Cookie の有効期限は一定のままです。

そのため、28 分 + 35 分にリフレッシュした場合、Cake セッションは内部的に (内部 = Cake の内部) 存続しますが、ブラウザは 30 分後にセッション Cookie を削除してしまいます。

経由でセッション Cookie の有効期限をリセットできます$this->Session->renew()。またはセットautoRegenerate = trueand requestCountdown = 1and Cake はページビューごとに更新されます。

(しかし、ページビューごとにセッションを再生成しなければならないのはちょっとばかげています。そのままでは、 がなけれrenew()ば、timeout値は機能しません。これは、アクティビティの量に関係なく、Cookie が常に決まった日に期限切れになるためです。バグのようですが、回避策は調べていません。)

于 2013-01-23T05:35:38.380 に答える
4

autoRegenerate同じ問題があり、オプションを使用して修正しました:

Configure::write(
    'Session',
    array(
        'defaults' => 'cake',
        'timeout' => '30',
        'autoRegenerate' => true
    )
);

クラスで使用することもでき$this->Session->renew();ますAppController.phpが、上記のソリューションが私のお気に入りです。

于 2013-01-23T04:03:46.507 に答える
0
    Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => 1440, // The session will timeout after 30 minutes of inactivity
    'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts
    'checkAgent' => false,
    'autoRegenerate' => true, // causes the session expiration time to reset on each page load
));

これは機能しますが、セッションは数時間で終了しますが、数分で終了するよりはまだましです。

于 2015-02-20T09:29:31.453 に答える