2011-04-07 155 views
0

我在我的站點內進行ajax和json調用,在服務器端會話超時時間爲120分鐘。時間到期後,用戶嘗試從已加載的頁面進行ajax或json調用,即可完成調用,我只是坐在那裏沒有響應。我正在使用一個sturts.xml文件來處理我所有的動作/ url調用,並且這個文件有一個攔截器,可以在每次調用服務器時運行。攔截器會檢查您是否登錄,如果不是,則會將您發送到登錄屏幕。問題是,ajax和json的調用將全部設置如下:當服務器會話超時時出現JSON/AJAX問題

*我不得不用「(」和「)」替換所有的「<」和「>」標籤,因爲編輯器不會顯示它們,所以只用更換括號 「>」 和 「<」

(動作名稱= 「someAction」 類= 「ActionClass」 方法= 「的someMethod」) (結果名稱= 「成功」 類型= 「JSON」) (PARAM NAME = 「目標」)的結果(/ PARAM) (PARAM NAME = 「模式」) - *。類(/ PARAM) (/結果) (/動作)

THER e是一個全球性的結果如下規定將被調用時,攔截器要送你到登錄頁面:

(結果名稱=「登陸」 TYPE =「磚」)爲site.login(/結果)

由於攔截器發回「login」而不是「success」的結果,ajax和json調用永遠不會收到它期望的結果,當我查看響應時,瀏覽器收到它是頁面的原始html我期待被重定向到。如果您的會話超時,任何其他類型的服務器調用都可以工作並將您發送到登錄屏幕。如果我試圖做一個普通的林行動電話,它會工作,但我不能做任何Ajax或JSON調用,並得到它的工作。有什麼建議麼?

回答

0

這可能是一個有點hackish,但這裏是我在PHP做(不知道你正在使用什麼語言):

if ($is_ajax_request && $not_logged_in) 
{ 
    exit('<script>top.location="/your_login_uri";</script>'); 
} 

Ajax調用返回腳本標籤,這將重定向當前頁面到您的登錄頁面。再次不確定你是否使用它,但你可以detect ajax requests with php。這可能不是最好的方式,但我已經使用了一年左右,每次都能很好地工作。希望這至少會給你一些想法。

讀者,請評論,如果你認爲這個解決方案是一個壞主意,並告訴我爲什麼,我想知道,因爲我在我所有的項目中使用它。

+0

對不起,我忘了提及,但我在後端使用Java,前端使用JSP和Javascript。 – usherjer 2011-04-07 23:32:53