如果在后台使用 jquery 进行会话检查失败,如何重定向 index.php 页面?

Posted

技术标签:

【中文标题】如果在后台使用 jquery 进行会话检查失败,如何重定向 index.php 页面?【英文标题】:How to redirect index.php page if session checking with jquery fails in the background? 【发布时间】:2016-11-11 08:06:53 【问题描述】:

我有一个 index.php 需要会话。我也有 sessioncheckpage.php

看起来像下面的代码。效果很好。

$login_hash=$_SESSION['hash'];
if ($login_hash != $tulos) 
    session_destroy();
    header("Location: login.php");

但是如何重新加载 index.php?我的 javascript 代码只是想在后台刷新 sessioncheckpage.php。

<script>
var interval    =   0;
function start()
    setTimeout( function()
        ajax_function();
        interval    =   10;
        setInterval( function()
            ajax_function();
        , interval * 1000);
    , interval * 1000);    


function ajax_function()
    $.ajax(
        url: "sessionchecker.php",
        context: document.body,
        success: function(result)
            $('.time').html(result);
        
    ); 


$( window ).load(function()
    var time    =   new Date();
    interval    =   10 - time.getSeconds();
    if(interval==10)
        interval    =   0;
    start();
);
</script>

上面是包含在 index.php 中的 jQuery。也可以将 index.php 作为 sessioncheckpage.php 重新加载,但有视频内容,因此在页面刷新(会话检查)后视频不应停止......

【问题讨论】:

【参考方案1】:

可以查看状态码

PHP 代码

<?PHP 
if(notLoggedIN())
    header("HTTP/1.1 401 Unauthorized");
    exit;

?>

jQuery

$.ajax(
    url: "sessionchecker.php",
    context: document.body,
    success: function(result)
        $('.time').html(result);
    
    error: function(jqXHR, status, code)
        if (jqXHR.status === 401) 
           window.location.replace("/login.php");
        
    
); 

【讨论】:

【参考方案2】:

如果您的 sessionchecker 脚本是 RESTful(即实现 HTTP 错误代码),则添加到您的 $.ajax 调用错误函数。否则,在你的成功函数中添加一个子句来调用window.location.reload()

$.ajax(
    url: "sessionchecker.php",
    context: document.body,
    success: function(result)
        $('.time').html(result);
    
    error: function(jqXHR, status, error)
        window.location.reload();
    
); 

【讨论】:

以上是关于如果在后台使用 jquery 进行会话检查失败,如何重定向 index.php 页面?的主要内容,如果未能解决你的问题,请参考以下文章

如何在获取 post 调用后管理重定向请求

如何区分后台会话中的下载任务?

许多带有后台会话的任务(NSURLSessionDownloadTask)导致使用 AFNetworking 失败

Firebase Analytics 如何处理后台活动的会话持续时间(mp3 播放器)

Swift URLSession DataTask 在应用程序进入后台时失败

通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证,使用 Passport?