PHP中解決ajax請求session過時退出登陸問題

PHP判斷一個請求是Ajax請求仍是普通請求


一、session過時,若是直接是url請求,或者用戶在打開的系統頁面中直接清除緩存及cookie信息,可直接在php的入口文件中調用如下封裝的方法,進行session信息判斷以及頁面的跳轉,如: php

if(empty($_SESSION['sessionid']) || empty($_COOKIE['PHPSESSID'])){

    echo "<script>";
    echo "alert('用戶過時,請從新登錄!');";
    echo "parent.window.parent.window.location.href = '/index.php';";
    echo "</script>";

}


二、若是是頁面保持着,可是10分鐘以內沒有作任何操做,頁不知道是否過時,點擊操做按鈕,例如保存等,ajax請求已經進行,將會把頁面的html打印出來,不能正常的彈出提示窗口,跳轉到登錄頁。 html

項目中進行ajax請求的操做不少,ajax的操做已經進行不能中斷,不可能在每一個ajax請求中都調用咱們封裝好的判斷session是否過時的邏輯,將增長工做負擔。我考慮在php的入口代碼中調用已經封裝好的session過時判斷,其返回標識如 echo "timeout";exit; jquery

在引用的jquery.js庫中找到.ajax中調用的done方法,補充一下邏輯判斷,解決了ajax請求SESSION過時頁面跳轉問題。 ajax

if(response == "timeout"){
       alert('SESSION信息已過時,請從新登錄!');
       parent.window.parent.window.location.href = '/index.php';
       return;
}

php封裝的判斷session是否過時的方法: 緩存

function checkSession(){

    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){          
        //is ajax
        if(empty($_SESSION['sessionid'])){
            echo "timeout";
            exit;
        }
    }
    elseif(empty($_SESSION['sessionid']) || empty($_COOKIE['PHPSESSID'])){
        echo "<script>";
        echo "alert('用戶過時,請從新登錄!');";
        echo "parent.window.parent.window.location.href = '/index.php';";
        echo "</script>";
    }

}
相關文章
相關標籤/搜索