页面重新加载但没有命中服务器

时间:2013-05-30 12:45:30

标签: php javascript apache firefox caching

我有以下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'
);

2 个答案:

答案 0 :(得分:2)

这个答案实际上是由Brian Lacy和user1600124提供的,但是他们只留下了评论,并没有发布这个答案。所以,如果您认为这是一个很好的答案,请将他们的评论投票。

使用window.location.reload(true)向服务器提交数据

如果您没有明确告诉浏览器不要在页眉中缓存页面..某些浏览器仍然会缓存动态页面,因为您发送的参数是相同的。

作为替代解决方案,您可以在网址上附加时间戳,以强制浏览器再次从服务器获取内容。

答案 1 :(得分:0)

同时为您的网页设置 pragma&#34; no-cache&#34; 标题可能有所帮助。

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Avoiding_caching