如何正确地使浏览器上的本地caching失效?

我正在解决我的网站上的问题,用户将成功进行身份validation,但浏览器将加载(我相信)用户redirect到的页面的本地caching。 由于是本地caching,因此页面显示为未login。手动刷新页面(使用浏览器上的刷新button)后,页面会显示您已login。

对于正常的Drupallogin事件(经常)对于Facebooklogin事件,(间歇性地)发生这种情况(间歇性地),并且在login和加载页面之后(间歇地)发生页面请求。 我在Mac上重现了Firefox和Chrome上的错误。

该网站在Drupal 7上运行,并使用Varnish(在万神殿举办)。

使用Facebooklogin查看问题的示例再现步骤:1.从Facebook和我的网站注销2.使用Facebookloginbuttonlogin我的网站3.从我的网站注销(使用网站注销链接)。 我仍然login到FB 4.使用我的网站上的FBloginbuttonlogin

我期望最终login在主页上,而不是redirect到主页,而是caching的版本(所以看起来我没有login)。 刷新浏览器导致主页重新login,我从这里设置。

我已经从上面的复制步骤中检查了标题(下面),如果我理解正确,我认为它们表明浏览器正在加载本地caching,当它应该是一个新的页面请求。 我不是caching方面的专家,所以它可能是头或其他问题。 我只是不知道是什么原因。

这是从最初的FBloginbutton点击标题。 由于我已经login到Facebook,我马上redirect到我的网站(这是预期的)。

Request URL:https://www.facebook.com/dialog/oauth?client_id=407390309287595&redirect_uri=http%3A//www.zujava.com/fboauth/connect&scope=email%2Cuser_about_me%2Cuser_website Request Method:GET Status Code:302 Found Request Headers Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Cookie:c_user=3413203; csm=2; datr=bq8bT_JILi0PrW8H9GZ5BMy6; fr=0MYU2YYrkDuegxlUi.AWVgxOkdsHe9zhvPJdDW7h70n48; lu=RgWtdyxDRmUr6dOIqyRyPhtg; s=Aa45lsbBS4F1Oll2.BQBsO2; xs=67%3AuZMhOYBden1YIw%3A2%3A1342620598; p=5; act=1342620710713%2F3%3A0; presence=EM342620710EuserFA23413203A2EstateFDutF0EsndF1EnotF0Et2F_5b_5dEuct2F134262011B0Elm2FnullEtrFnullEtwF2196532340EatF1342620710745Esb2F0CEchFDp_5f3413203F1CC; locale=en_US Host:www.facebook.com Referer:http://www.zujava.com/user/login User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11 Query String Parametersview URL encoded client_id:407390309287595 redirect_uri:http://www.zujava.com/fboauth/connect scope:email,user_about_me,user_website Response Headers Cache-Control:private, no-cache, no-store, must-revalidate Connection:keep-alive Content-Length:0 Content-Type:text/html; charset=utf-8 Date:Wed, 18 Jul 2012 14:18:46 GMT Expires:Sat, 01 Jan 2000 00:00:00 GMT Location:http://www.zujava.com/fboauth/connect?code=AQBbeDeOf-cd6HCy6GALaDqESzcfgTJNmh_i5iIx2IpG-KOWBTJHcylhigo82ZGR_X2SOJVzkwcvIKa7rD4dxcg2CLLDa3eZJMkDlP6D3UIU6c-iCFu_TZg6LkfLM4cOGKtu5HraaQUrLUPJd96hOsmpDuW9lzTLuBeMH4fwI7m7p3Jybig1GE06098OJCGuGos#_=_ P3P:CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p" Pragma:no-cache Set-Cookie:locale=en_US; expires=Wed, 25-Jul-2012 14:18:46 GMT; path=/; domain=.facebook.com X-Content-Type-Options:nosniff X-FB-Debug:GPh2t018FPktnIalVO4RrxjZAQ3onlvvFyAEgI6g08U= X-Frame-Options:DENY X-XSS-Protection:0 

接下来是在我的网站上完成FBlogin的标题。 您可以在响应头文件中看到正在创build的会话Cookie:

 Request URL:http://www.zujava.com/fboauth/connect?code=AQBbeDeOf-cd6HCy6GALaDqESzcfgTJNmh_i5iIx2IpG-KOWBTJHcylhigo82ZGR_X2SOJVzkwcvIKa7rD4dxcg2CLLDa3eZJMkDlP6D3UIU6c-iCFu_TZg6LkfLM4cOGKtu5HraaQUrLUPJd96hOsmpDuW9lzTLuBeMH4fwI7m7p3Jybig1GE06098OJCGuGos#_=_ Request Method:GET Status Code:302 Moved Temporarily Request Headers Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Cookie:ctools-collapsible-state=views-ui-advanced-column-petting_zu_graduates%3A1%2Cviews-ui-advanced-column-newly_published_content%3A1%2Cviews-ui-advanced-column-test%3A1%2Cviews-ui-advanced-column-html_sitemap%3A1; Drupal.tableDrag.showWeight=0; __atuvc=31%7C25%2C4%7C26%2C0%7C27%2C5%7C28%2C5%7C29; has_js=1; __utma=249598093.1349651830.1327187978.1342578105.1342618991.600; __utmb=249598093.64.9.1342621126771; __utmc=249598093; __utmz=249598093.1341848548.567.26.utmcsr=facebook.com|utmccn=(referral)|utmcmd=referral|utmcct=/l.php Host:www.zujava.com Referer:http://www.zujava.com/user/login User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11 Query String Parametersview URL encoded code:AQBbeDeOf-cd6HCy6GALaDqESzcfgTJNmh_i5iIx2IpG-KOWBTJHcylhigo82ZGR_X2SOJVzkwcvIKa7rD4dxcg2CLLDa3eZJMkDlP6D3UIU6c-iCFu_TZg6LkfLM4cOGKtu5HraaQUrLUPJd96hOsmpDuW9lzTLuBeMH4fwI7m7p3Jybig1GE06098OJCGuGos URL fragment #:_=_ Response Headers Age:0 Connection:keep-alive Content-Length:0 Date:Wed, 18 Jul 2012 14:18:47 GMT Location:http://www.zujava.com/ Via:1.1 varnish X-Pantheon-Edge-Server:10.183.199.123 X-Varnish:181771624 cache-control:no-cache, must-revalidate, post-check=0, pre-check=0 content-type:text/html etag:"1342621126" expires:Sun, 19 Nov 1978 05:00:00 GMT last-modified:Wed, 18 Jul 2012 14:18:46 +0000 server:nginx/1.0.15 set-cookie:SESS650d63be2a9c0113cd1740e78b8184ed=961WQoY1iwAJSjEBiuglfI_TDsz3VA8BReyLK2wnz44; expires=Fri, 10-Aug-2012 17:52:07 GMT; path=/; domain=.zujava.com; HttpOnly x-drupal-cache:MISS 

最终主页请求:

 Request URL:http://www.zujava.com/#_=_ Request Method:GET Status Code:200 OK (from cache) URL fragment #:_=_ 

我相信这表示主页正在被本地浏览器caching加载,并且实际上没有向服务器发出请求。 如果是这样,我为什么困惑。 我认为这个问题是我如何告诉浏览器caching主页?

以下是主页的注销页面加载的响应标题:

 HTTP/1.1 200 OK Server: nginx/1.0.15 Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding x-drupal-cache: HIT Etag: "1342622308-0" Content-Language: en x-generator: Drupal 7 (http://drupal.org) Cache-Control: public, max-age=10800 Last-Modified: Wed, 18 Jul 2012 14:38:28 +0000 Expires: Sun, 19 Nov 1978 05:00:00 GMT Content-Encoding: gzip Content-Length: 8686 Date: Wed, 18 Jul 2012 14:50:55 GMT X-Varnish: 658648930 658583362 Age: 295 Via: 1.1 varnish Connection: keep-alive X-Pantheon-Edge-Server: 10.183.199.163 

任何暗示或想法都会受到欢迎。

问题是,正如您已经写过的那样,主页被标记为可caching。 所以,当用户login时,浏览器将被redirect到主页,浏览器会自动为caching的主页提供服务。 在这一点上你不能使caching无效。

你必须让主页不能被浏览器caching(你仍然可以为匿名用户清除caching),或者你必须将login用户redirect到不同的页面,例如:example.com/logged-in其中包含相同的信息为主页,但不可caching。

在浏览器上caching网页是一个坏主意,因为这样你松散的统计信息,因为浏览器没有请求服务器。