私は、CakePHP 2.1で新しいHTTPキャッシュ機能を利用することによって、私のサイトをスピードアップしようとしています:CakePHPの2.1 HTTPキャッシュ
class ArticlesController extends AppController {
public function view($id) {
$article = $this->Article->find(
'first',
array('conditions' => array('Article.id' => $id))
);
$this->response->modified($article['Article']['modified']);
$this->set(compact('article'));
}
}
キャッシュが正常に動作しますが、異なるユーザを区別しません(つまり、もしユーザーはログインし、既にキャッシュされているページにアクセスし、以前にキャッシュされたページが表示され、ユーザー固有のコンテンツは表示されません)。
- キャッシュは、ユーザーがログインしている場合
- キャッシュが無効になっている別のユーザーと店舗の間で、ユーザーごとに別々のキャッシュを判別する(ユーザのログインのみに使用されます:私は起こることを、次のいずれかを希望します管理者の目的は)
私は
if (AuthComponent::user('id')) {
$this->disableCache();
}
を追加しようとしました。しかし、これは問題を解決していないよう
誰かがこれを動作させる方法を知っていますか、私は根本的に何か間違っていますか?
Iが試し$ this-> response-> etag($ this-> Article-> generateHash($ article))を使います。 'Array to string conversion'というエラーがあり、それを追求しませんでした。私はgenerateHashのためのドキュメントを見つけることができないので、私はそれをデバッグする考えがありません。 – Tomba
さらに、私は、絶対に必要でない限りEtagsを使いたいと確信していません。 – Tomba
独自のメソッドをgenerateHash()で実装して、特定の要件に合わせる必要があります。メソッドを実装する必要はありませんが、何とかハッシュを生成する必要があります。あなたの場合、md5($ userId。 ' - '。$ articleId)のようなものが必要です。 etagsを使用したくない場合は、とにかくハッシュキーを生成し、それをキャッシュする別の方法を見つける必要があります。また、ページ内のキャッシュされた要素と、ビュー内のユーザーに固有のページの部分のキャッシュされていない要素を使用することもできます。 – burzum