【发布时间】:2013-05-30 12:45:29
【问题描述】:
我有以下 Ajax 登录脚本。 index.php 将设置一个会话,然后在用户名和密码签出时返回类似{"status":true,"msgs":[],"url":"\/demo\/administrator\/index.php"} 的内容。然后页面应该重新加载,PHP 脚本将检查会话是否已设置,如果已设置,将显示相应的页面。
“有时”在 Windows 7 上运行 FireFox 21.0 时,页面似乎重新加载,但随后错误地重新显示登录页面。当我说“似乎要重新加载”时,在使用 FireBug 时,我看到了服务器的 POST,然后我看到了 console.log “重新加载页面”一小段时间,然后显示了登录页面。如果我随后手动重新加载页面,会话将签出,并返回正确的页面。
为了排除故障,我在我的 PHP 脚本中添加了一些 syslog(LOG_INFO,"got here!");,我发现它从未被第二次访问过,因此我相信服务器在重新加载后没有受到攻击。我还检查了 Apache 访问日志,我相信它只看到了第一个 POST。
谁能告诉我发生了什么,以及如何补救?谢谢
$.post('index.php',{task:'logon',username:username,password:password},
function (data)
{
if(data.status==true){
console.log('reload page');
//window.location.href = data.url;
window.location.href = window.location.href;
//window.location.reload();
}
else {msgs.html("<ul>"+mkList(data.msgs)+"</ul>");}
},'json'
);
【问题讨论】:
-
如果将
window.location.href = window.location.href更改为window.location.reload()会发生什么?我不确定它是否有区别,但也许浏览器实际上并没有发送请求,因为href值没有改变? -
@Brian。一样的效果。我什至返回网址的唯一原因是我可以测试
window.location.href = data.url; -
它是否出于某种原因缓存?您从 POST 请求中得到什么状态?另外,也许试试
window.location.reload(true)看看是否有什么不同。 -
@Brian。必须是缓存。
window.location.reload(true)似乎有效!你知道为什么吗? -
如果你没有明确告诉浏览器不要在标题中缓存页面。有些浏览器仍然会缓存动态页面,因为你发送的参数是相同的。你可以做的是追加url 的时间戳,将强制浏览器再次从服务器获取内容
标签: php javascript apache firefox caching