【发布时间】: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 文件的值更改为简单的
true或false(如果已登录),并将document.getElementById("mydiv")包装在一个 if 语句,它只会响应 true,这在我们的例子中意味着“登录”。 -
但我也不希望未登录的人访问这些页面,因此重定向仍然需要在该页面中。也许有办法检查请求是否来自我自己的 ajax 请求?
-
通过 ajax 调用请求的 PHP 文件中的重定向根本没有意义,它不会影响任何事情,您可以使用 @987654326 之类的东西退出 PHP 文件@.
标签: php javascript codeigniter xmlhttprequest tankauth