0

Cake 2アプリでは、APP / Config/core.phpに次のコードがあります。

Configure::write('Session', array(
    'defaults' => 'database',
            'cookie' => 'mycookie',
            'timeout' => 4320 //3 days
));

これはほとんど期待どおりに機能しています。セッションはデータベースに保存され、Cookieの名前が正しく設定され、3日後にCookieが削除されます。

上記の例はhttp://book.cakephp.org/2.0/en/development/sessions.html#built-in-session-handlers-configurationから入手しました。

残念ながら、これは私が望んでいることではありません。Cookieを3日後に削除したいのですが、ユーザーが最後にサイトでアクティブになってから3日後に削除したいと思います。言い換えると:

1)ユーザーが月曜日にサイトにアクセスすると、Cookieは水曜日に期限切れになるように設定されています。ただし、彼は火曜日に戻ってきたため、Cookieは木曜日に期限切れになります。

2)ユーザーは月曜日にサイトにアクセスし、木曜日まで戻ってこないため、新しいCookieを生成する必要があります。

最初は追加の問題かもしれないと思いましたが、それSession.autoRegenerateは役に立たないようです。このセットを使用しても、ユーザーが3日間サイトでアクティブだったとしても、Cookieは3日後に削除されるという同じ運命をたどっているようです。

4

1 に答える 1

0

PHP はリクエストごとにセッション Cookie を自動更新するため、セッションに別のタイムアウト変数を保存し、それを/Controller/AppController.phpファイルで処理することを検討する必要があります。

このようなものかもしれません。

/Controller/UsersController.php

public login() {
  if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->Session->write('Auth.timeout', strtotime('+3 days'));
            return $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
        }
    }
}

/Controller/AppController.php

public function beforeFilter() {
  if ($this->Auth->user() && $this->Session->read('Auth.timeout') <= strtotime('now')) {
    $this->Auth->logout();
    $this->Session->setFlash(__(Your session expired.'), 'default', array(), 'auth');
  }
}
于 2012-05-29T14:36:17.630 に答える