2016-03-01 29 views
1

我不知道該在標題中寫些什麼,因爲我發現情況有點複雜和尷尬。PHP CodeIgniter - 在cookie過期後唱歌,但頁面仍然存在,該怎麼辦?

我有一個你可以登錄的界面,還有一個儀表盤。在那裏有一個輸入,讓您搜索數據庫中的項目,並通過$ .ajax返回結果。

現在,如果用戶在頁面上停留時間過長,他們的cookie會過期,但他們仍然在頁面上。因此,當他們在輸入中輸入內容時,「is_logged_in()」會被觸發,返回false,然後吐出登錄屏幕,就像它應該那樣。

但由於Ajax是加載任何內容返回到一定的DIV,它結束了加載整個登錄窗口其中被搜索到的項目都應該是出現,如果是有道理的區域。

我認爲使用JavaScript來讀取返回的數據之前加載到div,但我試圖避免使用JS重定向,除非它是絕對必要的。

任何方法?

所有幫助表示讚賞。

回答

1

您需要每隔N秒檢查一次會話。如果會話過期,只需重新加載頁面。上面的代碼檢查會話是否每5秒過期一次。


JS

var check_session; 
function CheckForSession() { 
     var str="chksession=true"; 
     jQuery.ajax({ 
       type: "POST", 
       url: "sec.php", 
       data: str, 
       cache: false, 
       success: function(res){ 
        if(res == "1") { 
        alert('Your session has expired'); 
        } 
       } 
     }); 
} 
check_session = setInterval(CheckForSession, 5000); 

sec.php

session_start(); 
$name = $_SESSION["your_session"]; 
if($name == '') 
{ 
    //session expired 
    echo "1"; 
} else { 
    //session not expired 
    echo "0"; 
} 
0

笨在方法構建用於檢測AJAX請求:

$this->input->is_ajax_request(); 

你可以做的是:

  1. 做一個Ajax請求

  2. 檢查is_ajax_request並沒有登錄

  3. 如果是這樣,發送類似 「拒絕」 的AJAX網站

  4. 通過JavaScript重定向,如果傳入數據===「拒絕」

相關問題