php - 当 codeigniter/tank auth session 超时时处理 ajax 调用中的 php 重定向

标签 php javascript codeigniter xmlhttprequest tankauth

嘿,我在 codeigniter View 中有一个 javascript 函数,该函数从 codeigniter Controller 函数中检索一些信息,当达到用户 session 超时时,该函数会表现得很奇怪。在被调用的 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中,而不是重定向到登录页面。这看起来很糟糕。如果用户 session 在查看此页面时超时,如何阻止它执行此操作?我无法更改超时限制,因为其他应用程序依赖它。

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

最佳答案

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

例如,您可以这样做:

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

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

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

希望这有帮助!我会回避使用 PHP/CI 方法,因为听起来你会在代码中的任何地方添加异常,这不太好。不过,这完全取决于您。

关于php - 当 codeigniter/tank auth session 超时时处理 ajax 调用中的 php 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360430/

相关文章:

javascript - jquery 脚本不改变 div 的类

php - Codeigniter PHP 从一个数组创建两个不同的数组

codeigniter - 使用 Codeigniter 构建网站后端

hash - 如何打开 hash_algos() ?我使用的是 Php 5.2.11

php - 我可以在 guest 操作系统上设置使用 Windows 主机中的文件的 WAMP 虚拟机吗?

php - 将自定义字段添加到 Woocommerce 中的结帐表单

codeigniter - ci-merchant purchase() 不工作

php - 无法在 Ubuntu 18.10 上安装 php7.2-ldap - "unmet dependencies"

javascript - 我遇到错误 Uncaught TypeError : Cannot read property 'toLowerCase' of undefined

javascript - 将 Mongoose 模式导入另一个模式文件使导入的模式未定义