0

我有以下 Ajax 登录脚本。 index.php将设置一个会话,然后返回类似{"status":true,"msgs":[],"url":"\/demo\/administrator\/index.php"}用户名和密码签出的内容。然后页面应该重新加载,PHP 脚本将检查会话是否设置,如果是,将显示适当的页面。

“有时”在 Windows 7 上运行 FireFox 21.0 时,页面似乎重新加载,但随后错误地重新显示登录页面。当我说“似乎要重新加载”时,在使用 FireBug 时,我看到 POST 到服务器,然后我看到 console.log “重新加载页面”一小段时间,然后显示登录页面。如果我随后手动重新加载页面,会话将签出,并返回正确的页面。

为了排除故障,我syslog(LOG_INFO,"got here!");在我的 PHP 脚本中放了一些,我发现它再也没有被访问过,因此我相信服务器在重新加载后没有受到攻击。我还检查了 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'
);
4

2 回答 2

2

这个答案确实是由 Brian Lacy 和 user1600124 提供的,但他们只留下评论并没有发布这个答案。因此,如果您认为这是一个很好的答案,请对他们的评论进行投票。

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

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

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

于 2013-06-04T11:27:49.083 回答
0

还为您的页面设置编译指示“无缓存”标头可能会有所帮助。

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

于 2013-06-04T11:31:05.857 回答