2017-08-16 85 views
0

我有這顯示一個時間表,並且用戶可以點擊左,右網頁的區域前進/後退一週:如何處理一個PHP會話超時

<script type="text/javascript"> 
var TimesheetOffset = 0; 
function TimesheetNav(AdjustBy) { 
    TimesheetOffset = TimesheetOffset + AdjustBy; 
    $("#timesheets").load("populate_timesheets.php?start=" + TimesheetOffset); 
} 
</script> 

populate_timesheets.php腳本顯示在一個DIV面積「時間表」的ID時間表的信息,但前提是用戶登錄和他們的會話尚未過期 - 如果會話已過期,顯示登錄頁面:

if (!isset($_SESSION['login_user'])) { 
     header("location: index.php"); 
    } 

問題是如果會話超時,index.php腳本出現在應該顯示時間表的地方,而不是替換整個頁面。我該如何修改PHP或JavaScript,以便如果會話超時,登錄頁面會替換整個頁面?

+1

你可以將'$(「#timesheets」).load()'改爲可以處理響應代碼的東西。您也可以輪詢服務器以保持會話活動或在超時情況下重定向。也可以更改會話中的gc以使其保持更長時間。很多事情到目前爲止你嘗試過什麼? –

+0

您不能從後臺請求重定向「前端」。您需要在前端執行此操作,即使用JavaScript重定向到登錄頁面。所以你的服務器端腳本只需要返回一個_value_到你的JavaScript,它可以基於這個決定。這可能意味着你不想首先使用.load,因爲它沒有這種內置的功能。所以一個「正常」的AJAX請求可能是更好的選擇,它給了你更多的靈活性來對這兩種不同的情況作出反應。 – CBroe

回答

1

JavaScript代碼:

$.ajax("populate_timesheets.php?start=" + TimesheetOffset, { 
    type: "GET", 
    statusCode: { 
     401: function (response) { 
     // redirect to login page 
     } 
    }, 
    success: function (data) { 
     $("#timesheets").html(data); 
    }, 
    error: function (error) { 
     console.log('Error occured: ', error); 
    } 
}); 

PHP代碼:

if (!isset($_SESSION['login_user'])) { 
    header("HTTP/1.1 401 Unauthorized"); 
    return; 
} 

我沒有測試此代碼,所以如果你有問題,請閱讀jQuery文檔關於Ajax請求:)

+0

我已經試過這段代碼,但由於某種原因,它現在不填充'timesheets' DIV - 你能檢查請願書嗎? –

+0

我忘了給$ .get中的回調函數添加一個參數。現在試試,我更新了我的答案。 –

+0

謝謝,它現在填充良好,但是當會話超時時,登錄頁仍然出現在'timesheets' DIV內,而不是整個頁面 –