web-dev-qa-db-ja.com

非アクティブ時のみのCakePHPセッションタイムアウト

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

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

これは現在起こっていません。アクティビティに関係なく、CakePHPは私のコア設定(app/Config/core.php)で指定された時間後にタイムアウトします。

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

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

何か案は?

24
Kyle O'Brien

同じ問題が発生した後、これは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
    ));
27
Rob Forrest

timeout値は各ページビューでリセットされ、必要な「非アクティブタイムアウト」が提供されますが、ブラウザのセッションCookieの有効期限は変わりません。

したがって、28分+ 35分に更新した場合、Cakeセッションは内部的に(内部的にはCakeの内部に)存続しますが、ブラウザは30分後にセッションCookieを削除することになります。

セッションCookieの有効期限は$this->Session->renew()でリセットできます。または、_autoRegenerate = true_と_requestCountdown = 1_を設定すると、各ページビューでCakeが更新されます。

(しかし、すべてのページビューでセッションを再生成する必要があるのはばかげています。現状では、renew()がない場合、timeout値は、Cookieが常にアクティビティの量に関係なく、固定日に期限切れになります。これはバグのように見えますが、回避策については調べていません。)

8
Costa

同じ問題が発生し、autoRegenerateオプションを使用して修正しました。

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

_AppController.php_クラスで$this->Session->renew();を使用することもできますが、上記の解決策は私のお気に入りです。

4
Andre S

ロブ・フォレストの答えは正しいです

Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 30, // The session will timeout after 30 minutes of inactivity
        'cookieTimeout' => 1440
));

非アクティブ状態でのみセッションを期限切れにしたい場合は、cookieTimeoutをタイムアウトより大きくする必要があります。非常に大きな数(たとえば、60 * 24 * 10(10日))に対してcookieTimeoutを設定する必要があります。

2
Jondi
    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
));

これは機能しますが、セッションは数時間後に終了しますが、数分で終了するよりも優れています。

0
imsheth