我有一个 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
标题?