【问题标题】:Handling php redirect in ajax call when codeigniter/tank auth session timeout reached在达到 codeigniter/tank auth 会话超时时处理 ajax 调用中的 php 重定向
【发布时间】:2012-09-03 20:03:21
【问题描述】:

嘿,我在 codeigniter 视图中有一个 javascript 函数,该函数从 codeigniter 控制器函数中检索一些信息,当达到用户会话的超时时,该函数的行为异常。在被调用的 php 函数中,我有一个如下所示的语句:

  if (!$this->tank_auth->is_logged_in()) {
  redirect(site_url('login'));}

如果他们没有登录,这会将他们重定向到我的登录页面。但是在 javascript 函数中,我获取响应文本并将 div 的内容设置为等于它。

  xmlhttp = new XMLHttpRequest();
  xmlhttp.open("POST", "mycontroller/myfunction/", false);
  xmlhttp.send();
  document.getElementById("mydiv").innerHTML=xmlhttp.responseText;

如果用户在调用此函数时已注销,它将返回登录页面的 responseText 并将其插入到 div 中,而不是重定向到登录页面。这看起来很可怕。如果用户会话在查看此页面时超时,我该如何阻止它执行此操作?我无法更改超时限制,因为其他应用程序依赖它。

这根本不是 codeigniter 或 tank_auth 问题,只是当我最初使用该函数为 responseText 生成字符串时,如何从 ajax 请求中调用的 php 函数重定向。

【问题讨论】:

  • 澄清一下,您是否在使用 ajax 请求的 PHP 文件中使用重定向?
  • @dbf ajax 请求是针对一个文件,该文件恰好检查用户是否已登录,这对我的应用程序来说是必需的。如果他们没有登录,它会将他们重定向到登录页面。这里的问题是,如果 ajax 请求在他们未登录时发生,它仍然会调用返回重定向登录页面的 responseText 的 php 函数。
  • 如果我理解正确,将 ajax 请求调用的 PHP 文件的值更改为简单的 truefalse(如果已登录),并将 document.getElementById("mydiv") 包装在一个 if 语句,它只会响应 true,这在我们的例子中意味着“登录”。
  • 但我也不希望未登录的人访问这些页面,因此重定向仍然需要在该页面中。也许有办法检查请求是否来自我自己的 ajax 请求?
  • 通过 ajax 调用请求的 PHP 文件中的重定向根本没有意义,它不会影响任何事情,您可以使用 @987654326 之类的东西退出 PHP 文件@.

标签: php javascript codeigniter xmlhttprequest tankauth


【解决方案1】:

您需要解析响应并确定它是否是您期望的响应类型。如果您期望的字符数少于一定数量,您可以检查长度,但这可能不如检查特定的 dom 对象或字符串可靠。

你可以这样做,例如:

if(xmlhttp.responseText.length < 200) {
    document.getElementById("mydiv").innerHTML=xmlhttp.responseText;
} else { 
    window.location.href = 'some url';
}

另一种选择是使用 CodeIgniter 的 AJAX 响应检查来执行其他操作,而不是加载视图(或加载不同的视图):

if ($this->input->is_ajax_request())
{
    // do something else 
}
else
{
    // do what you were doing before
}

希望这会有所帮助!我会回避使用 PHP/CI 方法,因为听起来你会在代码中到处添加异常,这并不漂亮。不过,这完全取决于您。

【讨论】:

  • 谢谢,这正是我想要做的。
【解决方案2】:

如果您非常了解您的登录设计。你可以这样处理你的回复。

success: function (response) {

if(result.substring(0, 15) == '<!DOCTYPE html>') //Your login's HTML initials.
    window.location = site_url_path + 'login'; //session timeout redirection.
//your normal functionality

}

当您在控制器的构造中编写重定向时会很有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 2020-02-17
    • 1970-01-01
    • 2017-12-30
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多