【问题标题】:AJAX Logout if Session has Expired如果会话已过期,则 AJAX 注销
【发布时间】:2012-05-14 15:19:15
【问题描述】:

如果 SESSION 已过期,我有一些 AJAX 调用仍然部分工作。

例如:将加载一个联系我们的表单,可以填写并显示为已发送,但 AJAX 调用在后端失败,因为 SESSION 变量不存在。

我想设置一个通用的 PHP 来检查会话是否仍然存在,例如:

 session_start();     
 <?php if(!isset($_SESSION['userid']) {header('Location: index.php');}?>

但是在这个地方没有任何反应。

我假设 header() 仅在页面加载时起作用 - 这是正确的吗?

因此,我假设我需要获取 AJAX 调用以在会话中返回成功或失败,并从 JQUERY 进行重定向。

这是最好的方法吗? header() 可以在 AJAX 调用上重定向吗?还有另一种方法可以让重定向从 AJAX PHP 调用中工作吗?

谢谢

* 更新 *

是的,页面已经加载。 AJAX 调用是一个发送联系请求的后页面加载函数。因此,我认为 header() 从我在这里读到的内容是不行的。 header() 本来会很好,因为它可以放在大型 PHP 脚本的顶部,并一般响应设置会话的任何请求。

看起来我必须为每个使用会话的 AJAX 调用构建一个签入。可以使用通用函数。当会话在 AJAX 站点上过期时,是否有更简单的方法可以让用户退出?

【问题讨论】:

  • 不,这实际上应该有效,除非您已经发送了一些输出。你有任何错误吗?
  • @Truth 如果他通过 AJAX 调用并获取该信息,很可能他已经有了输出(AJAX 调用需要输出?),所以标题不能更改,除非页面已刷新。
  • 这里的问题是这段代码发生在哪里。 AJAX 调用本身还没有发送输出,所以它仍然是可能的。亚当应该改写他的问题并更好地解释它。
  • @Truth 我认为根据他提供给我们的信息,我们可以安全地假设他的代码来自 AJAX 调用。无论哪种方式我都同意,可以更好地解释代码的运行。

标签: php ajax session


【解决方案1】:

如果是 AJAX 调用,则页面的标题已经发送,因此无法通过 AJAX 调用更改。相反,请尝试使用元刷新来代替标头重定向:

<?php
session_start();
if(!isset($_SESSION['userid']) { 
    echo '<meta http-equiv="refresh" content="0; url=index.php">'; 
} 
?>

【讨论】:

  • 太好了,这也有效,但我想知道在会话过期时使用 'meta http-equiv=refresh' 而不是标头进行重定向是否有任何风险、优势或劣势。
【解决方案2】:

更新你的脚本如下:

<?php
session_start();
if(!isset($_SESSION['userid']) {
  echo 'true';
} else echo 'false';
?>

在 jQuery 中检查:如果返回 true,则 $_SESSION['userid'] 是 isset,否则不是 isset)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2021-03-05
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    相关资源
    最近更新 更多