在我們的應用程序中,一旦用戶登錄,我們在JSF/PrimeFaces,Spring和Hibernate中使用 ,我們在數據庫中設置一個標誌,直到用戶從應用程序註銷或會話過期。問題是,我們需要清除DB中的這個標誌,即使他只是在沒有正確註銷的情況下關閉瀏覽器。爲了達到這個目的,我已經嘗試了jquery $window.unload
和$window.bind
函數,它們實際調用一些與<p:remoteCommand>
相關聯的JS函數,後者又調用託管bean方法來清除數據庫。不過,後來我才知道這是不可靠的,而且在測試的同時我們也看到這個事件並沒有一貫地解除。我怎樣才能實現數據庫清理?如何清除jsf中關閉瀏覽器的數據庫條目?
回答
在瀏覽器上關閉關閉不可靠。您可以使用beforeunload
事件,但這不是全世界都知道的每個瀏覽器都支持的,甚至終端用戶可以禁用/欺騙/破解。那麼我們在解僱ajax請求時並沒有談論競爭條件:在瀏覽器關閉之前ajax請求是否會全部到達?通常情況下,情況並非如此,瀏覽器關閉勝過ajax請求。
只是在會話過期時監聽服務器端。
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
// NOOP.
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
// Do your job here.
// ...
}
}
注意,這也激活時,你的方案註銷過程中顯式調用ExternalContext#invalidateSession()
(或HttpSession#invalidate()
)。
嗯...我也想知道這樣的事情。不管怎麼樣,你的答案都是thanx mate。試試吧,讓你知道結果。 –
問題是當瀏覽器關閉時sessionDestroyed沒有被調用。您對此有何看法? –
當會話被銷燬時會調用它,這是在瀏覽器關閉後X分鐘發生的。該X默認爲30分鐘,並可在web.xml中配置。 – BalusC
- 1. 清除瀏覽器上的cookies關閉
- 2. 關閉瀏覽器清除PHP會話
- 3. 瀏覽器關閉後從數據庫中刪除
- 4. 如何清除瀏覽器關閉的設計會話?
- 5. 如何在關閉瀏覽器選項卡時清除會話?
- 6. jsf按鈕關閉瀏覽器頁面
- 7. 如何使JSF中關閉瀏覽器的會話無效
- 8. 關閉瀏覽器更新數據庫關閉
- 9. 如何在瀏覽器關閉時執行數據庫操作?
- 10. 如何在JSF中關閉瀏覽器時結束http會話
- 11. 在關閉瀏覽器標籤從SQL數據庫中刪除特定數據
- 12. 如何清除httpsession,如果用戶關閉在java中的瀏覽器
- 13. 如何在用戶關閉瀏覽器時從mysql數據庫刪除記錄
- 14. 在瀏覽器中關閉標籤時驗證清除
- 15. 在Mac OS中關閉瀏覽器後cookie沒有清除
- 16. 在所有主流瀏覽器中清除瀏覽數據
- 17. 數據庫條目不會在IE中顯示,除非瀏覽器完全關閉並重新打開
- 18. 如何在angularjs中關閉標籤和瀏覽器的關閉數據
- 19. 如何在Liferay中關閉瀏覽器?
- 20. 關閉瀏覽器
- 21. 如何清除瀏覽器的緩存?
- 22. 在關閉IE瀏覽器窗口時Cookie被清除
- 23. 爲什麼在瀏覽器關閉後會話不能清除?
- 24. PHP會話Cookie未在瀏覽器上清除關閉
- 25. 在瀏覽器關閉清除會話 - 本機會話
- 26. 關閉瀏覽器後清除緩存 - symfony2
- 27. 在瀏覽器關閉時更改數據庫的值表... JSP
- 28. 瀏覽器在項目緩存清理後關閉[symfony2]
- 29. 如何從單列中清除大MySQL數據庫舊條目?
- 30. 關閉瀏覽器時cookie被刪除
會提示基於超時的方法 – sidgate
有沒有辦法檢測瀏覽器是否關閉。這不可能。 – Makky
由於問題太常見了,我不得不相信必須有一些解決辦法。儘管Iamyet嘗試這樣做,但我們可以寫一個過濾器並嘗試清除過濾器的銷燬方法中的標誌嗎?只是一個預感! ! –