我有一个使用与Sinatra应用imonaplane相同的Twitter身份验证代码的Web应用程序。
主页显示“使用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
标题?
答案 0 :(得分:2)
不同的浏览器会在Cache-Control Header中确认不同的值。
据我所知(虽然我现在不能引用任何好的来源)确保在任何浏览器中都没有执行缓存,Cache-Control
标题可以设置为"max-age=0, private, no-store, no-cache, must-revalidate"
。