2011-12-21 5 views
2

저는 PHP의 일부 소프트웨어로 작업 중이며 HTTP 캐싱을 효과적으로 활용하려고합니다. 그러나 최근에 내가 겪어 본 문제 중 하나는 로그인 후 방문한 페이지가 캐싱되어 로그인 한 것처럼 작동하지 않는다는 것입니다.HTTP 캐싱, 사용자 인증 및 PHP

이것은 HTTP PHP와 클라이언트 사이의 캐시. 캐시 리미터를 항상 '공개'로 설정하면 페이지가 항상 프록시 캐시에 의해서도 캐시됩니다. 캐시 리미터를 로그인하지 않은 경우 '공개'로 설정하면 기록 될 때 '개인'으로 설정됩니다. in, 내가 현재 가지고있는 문제는 아마도 여전히 발생할 것입니다. 캐시 리미터를 항상 비공개로 설정하면 프록시 캐시가 전혀 도움이되지 않고 현재 가지고있는 문제가 여전히 발생합니다.

이 문제에 대한 이상적인 해결책은 무엇입니까? 사용자가 로그인 한 후 웹 브라우저에서 '다시 시도'할 수있는 방법이 있습니까? 프록시 캐시의 경우 들어오는 쿠키를 기반으로 캐시하는 방법이 있으므로 문제의 일부가 해결 될 수 있다고 생각합니다. 그러나 웹 브라우저 관점에서 볼 때이 문제는 어떻습니까?

+1

'must-revalidate' 또는'proxy-revalidate'가 여기의 마법 키워드입니까? –

+0

오, 잊어 버렸습니다. '반드시 다시 확인해야합니다.'... 당신이 옳을 수도 있습니다. 나는 그것이 캐싱하지 않기 위해 캐싱 프록시 (caching proxy)로서 nginx를 야기한다고 믿는다. 그것에 대해 무엇을해야합니까? 여기 nginx를 사용하고 싶습니다. –

+0

사실, 나는 틀렸어. 나는 주제에 관해서 읽었고 (왜냐하면 나는 결코 이것을 기억하지 못하기 때문이다), 캐시 된 사본이 유효하지 않게 된 후에 다시 검증되어야 함을 의미한다. –

답변

1

가 여기에 훌륭한 솔루션이 아니라 당신이 몇 가지 옵션이 있습니다 :

  1. 사용자가 AJAX이 (가)를 통해 상태에서 로그인 요청 활용하여, 로그인 또는 여부를 진정으로 동일한 페이지를 확인을 JSON 서비스입니다.
  2. 페이지를 캐시하지 않고 스크립트, 스타일 및 이미지를 캐시하십시오. HTML의 브라우저 캐싱은 사용자가 동일한 페이지를 개로 계속보고 있고 다른 결과를 기대하지 않는 경우에만 유용합니다. 여기가 유스 케이스인가요? 그렇다면실시간 업데이트를 제공하기 위해 이미 AJAX를 사용하고 있으며 옵션 # 1을 구현하는 데 큰 도약이 아닐 수도 있습니다.