Http 如何防止Mobile Safari缓存个性化主页?
我有一个web应用程序,它使用与Sinatra应用程序相同的Twitter身份验证代码 主页要么显示“使用Twitter登录”,要么显示个性化内容。登录后,您将(通过HTTP 302)重定向到主页:Http 如何防止Mobile Safari缓存个性化主页?,http,caching,heroku,sinatra,mobile-safari,Http,Caching,Heroku,Sinatra,Mobile Safari,我有一个web应用程序,它使用与Sinatra应用程序相同的Twitter身份验证代码 主页要么显示“使用Twitter登录”,要么显示个性化内容。登录后,您将(通过HTTP 302)重定向到主页: get '/session_auth' do if params[:oauth_verifier] access_token = twitter_client.authorize( session[:request_token], session[:request_token
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 stack上运行的。没有使用HTTP缓存头
这里有什么问题?我是否应该明确告诉浏览器不要缓存主页,可能带有
缓存控件:private
头?不同的浏览器在缓存控件头中确认不同的值
据我所知(尽管我现在无法引用任何优秀的源代码),为了确保在任何浏览器中都不执行缓存,
缓存控制
标题可以设置为“max age=0,private,no store,no Cache,must revalidate”
,我认为这是基于Mobile Safari实现缓存错误,您可以发送一个时间戳作为查询参数。禁用缓存是通过缓存控制:无缓存
,非私有
,(私有
允许通过“私有”缓存进行缓存,也可能是浏览器缓存)。谢谢,康斯坦丁。我会试试的。你为什么不回答呢?;-)因为我不确定它是否适合解决您的问题,尤其是因为我没有移动Safari可玩。