登录加载页面

时间:2012-01-10 22:36:06

标签: php login header loading

我有一个用户可以登录的php网站。用他们的凭据提交POST数据后,他们会转到启动session的页面并检查database。此过程需要很长时间才能最终将用户重定向到站点的后端。 Durring这次用户楼梯在一个空白的白页。我想显示某种加载页面,但当页面上有任何可打印的内容时,由于重定向,我会收到header错误。

如何创建加载页面?我知道ajax是一个选项,但它是我唯一的选择吗?

更新 PHP应用程序主要需要很长时间,因为每次登录都依赖于需要授权的外部 API 以及收费数据需要被查询。我不是想掩饰一些我可以轻松修复的东西,我正在尝试创建一个更好的用户界面。

登录过程大约需要10秒钟。

2 个答案:

答案 0 :(得分:2)

这有一个经典的伎俩:

  • 将登录表单的目标设置为(不可见)iframe,但只需将变量设置为重定向URL
  • 在提交时将带有用户名/密码的div设置为.style.display ='none',然后将已加载的“请等待”div设置为.style.display ='block'
  • 当iframe最终加载时,使用document.getElementById('myiframe')。contentWindow.VarName获取URL并将其写入location.href

答案 1 :(得分:2)

嗯,处理这个的简单方法如下:

用户按下登录后,使用javascript,隐藏登录按钮,注入一些 ajaxloader gif,然后发送带有登录凭据的AJAX请求,正确加密,登录用户,将响应发布为JSON,并拦截该响应,并在成功的情况下 - 重定向,失败 - 打印适当的消息。

一些代码:

登录-handler.php

$user = new user();
if ($user -> login($_POST['uid'], $_POST['password'], $_POST['whatever']){
  $response['type'] = 'success';
}
else{
  $response['type'] = 'failure';
} 
echo json_encode($response);

JS-login.js

$("#login").click(function(){
  // verify that user put user name, password and whatever, hide button and show ajax loader

  $.get("login-handler.php", {user: user, password: password}, function(data){
    if (data.type == "success"){
      window.location = "http://example.com/new/location/whatever";
    }
    else{
      //print message
    }
  }, "JSON"); 
});
编辑:但我想和其他人一起考虑使用速度更快/不同的API,因为10秒的加载时间完全是荒谬的,除非是为了你自己,在这种情况下 - 把自己搞得一团糟。