3

我有一个 Web 应用程序,它使用与 Sinatra 应用程序imonaplane相同的 Twitter 身份验证代码。

主页显示“使用 Twitter 登录”或个性化内容。登录后,您将被重定向(通过 HTTP 302)到主页:

get '/session_auth' do
  if params[:oauth_verifier]
    access_token = twitter_client.authorize(
      session[:request_token], session[:request_token_secret], oauth_verifier: params[:oauth_verifier])
    if twitter_client.authorized?
      user = db.load(User.to_id(twitter_client.info['screen_name'])) || User.new(login: twitter_client.info['screen_name'], twitter_access_token: access_token.token,
        twitter_secret_token: access_token.secret)
      db.save! user
      session[:user_id] = user.id
    end
  end
  redirect '/'
end

这在 Firefox 14.0.1 和 Safari 5.1.7 以及 iOS 模拟器中运行良好。

但是,iOS 5.1.1 上的 Mobile Safari 似乎正在缓存通用主页。这给人的印象是您没有登录,因为它仍然显示“使用 Twitter 登录”。重新加载将显示个性化内容。

这是在 Heroku、Cedar 堆栈上运行的。不使用 HTTP 缓存标头。

这里有什么问题?我是否应该明确告诉浏览器不要缓存主页,可能带有Cache-Control: private标题?

4

1 回答 1

2

不同的浏览器在 Cache-Control Header 中确认不同的值。

据我所知(尽管我现在不能引用任何好的来源)以确保在任何浏览器中都不会执行缓存,Cache-Control可以将 Header 设置为"max-age=0, private, no-store, no-cache, must-revalidate".

于 2012-09-26T15:58:09.233 回答