如果会话已过期,我有许多 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 站点上的会话过期时,是否有更简单的方法将用户注销?
如果是 AJAX 调用,
则页面的标头已发送,因此无法通过 AJAX 调用进行更改。 相反,请尝试元刷新来代替标头重定向:
<?php
session_start();
if(!isset($_SESSION['userid']) {
echo '<meta http-equiv="refresh" content="0; url=index.php">';
}
?>
将 yor 脚本更新为 folows:
<?php
session_start();
if(!isset($_SESSION['userid']) {
echo 'true';
} else echo 'false';
?>
在jQuery检查中:如果返回true,则$_SESSION['userid']是isset,否则不是isset(