Я пытаюсь ускорить свой сайт, воспользовавшись новыми функциями кэширования HTTP в CakePHP 2.1: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'));
}
}
Кэширование работает отлично, но не делает различий между разными пользователями (т.е. если пользователь входит в систему и посещает страницу, которая уже была кеширована, отображается предыдущая кэшированная страница, а контент для конкретного пользователя не отображается). Я хотел бы одно из следующих действий произойдет:
- Cache различение между различными пользователями и сохраняет отдельный кэш для каждого пользователя
- Кэширование отключена, если пользователь вошел в систему (Логин пользователя используется только для цели администратора)
Я попытался добавить
if (AuthComponent::user('id')) {
$this->disableCache();
}
Но это не похоже, чтобы решить эту проблему
Кто-нибудь знает, как заставить это работать, или я делаю что-то принципиально неправильно?
Я попытался используя $ this-> response-> etag ($ this-> Article-> generateHash ($ article)); но получил ошибку «Array to string conversion» и не преследовал ее. Я не могу найти какую-либо документацию для generateHash, поэтому я понятия не имею, чтобы ее отлаживать. – Tomba
Кроме того, я не уверен, что хочу использовать Etags, если это абсолютно необходимо. – Tomba
Вы должны реализовать метод generateHash() самостоятельно, чтобы соответствовать вашим конкретным требованиям. Вам даже не нужно реализовать этот метод, но вам нужно создать хэш - так или иначе. В вашем случае вам нужно что-то вроде md5 ($ userId. '-'. $ ArticleId); Если вам не нравится использовать etags, вам все равно нужно создать хеш-ключ и найти другой способ его кеширования. Вы также можете использовать кешированные элементы на странице и не кешированные элементы для частей страницы, которые являются специфическими для пользователя в представлении. – burzum