我正在爲研究公司開發Web應用程序,其中一項要求是用戶一次只能登錄一臺設備。用戶關閉瀏覽器時更新MySQL數據庫
所以我開發了一個非常基本的系統中,當您登錄一些PHP在數據庫中更新了用戶的行從0到1,當您單擊註銷按鈕,它再次更新該行從1到0
唯一的問題是,如果用戶不使用註銷按鈕並簡單地關閉瀏覽器,它將結束會話並註銷它們,但它們在數據庫中的行不會被更新。
有沒有辦法更新瀏覽器關閉數據庫?
我正在爲研究公司開發Web應用程序,其中一項要求是用戶一次只能登錄一臺設備。用戶關閉瀏覽器時更新MySQL數據庫
所以我開發了一個非常基本的系統中,當您登錄一些PHP在數據庫中更新了用戶的行從0到1,當您單擊註銷按鈕,它再次更新該行從1到0
唯一的問題是,如果用戶不使用註銷按鈕並簡單地關閉瀏覽器,它將結束會話並註銷它們,但它們在數據庫中的行不會被更新。
有沒有辦法更新瀏覽器關閉數據庫?
您可以使用卸載事件,您將發送一個ajax請求到服務器,該服務器將更新mysql中的標誌。您可以嘗試遵循jQuery語法。
$(window).bind('unload', function(){
$.ajax({
type: 'get',
async: false,
url: 'path/to/file.php'
});
});
沒有可靠的方法。您可以在頁面關閉時調用一個javascript函數,然後將請求發送到您的服務器,告訴它該會話已完成,但是又一次:javascript可能關閉,甚至可能根本不執行。你最好的辦法是與超時工作:存儲最後一次操作的時間。如果超過10分鐘,則「過期」會話。
是的,我們正在爲此執行cronjob。但是,如果他們不小心關閉了瀏覽器,那麼他們無法再回到10分鐘。 – AzzyDude
這是一個簡單的瀏覽器關閉事件解決方案。我遇到了一些關於「onunload」和「beforeununload」事件的問題。它將在瀏覽器關閉,標籤關閉,任何鏈接點擊,URL更改時觸發。所以我定製了我的代碼。
<script type="text/javascript">
jQuery(document).ready(function() {
var validNavigation = false;
// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e) {
if (e.keyCode == 116){
validNavigation = true;
}
});
// Attach the event click for all links in the page
$("a").bind("click", function() {
validNavigation = true;
});
// Attach the event submit for all forms in the page
$("form").bind("submit", function() {
validNavigation = true;
});
// Attach the event click for all inputs in the page
$("input[type=submit]").bind("click", function() {
validNavigation = true;
});
window.onbeforeunload = function() {
if (!validNavigation) {
var status = 'abandoned';
$.ajax({
type: "POST",
url: your action URL,
data: "status=" + status,
success: function(res) {
},
});
}
};
});
</script>
這有效!那很完美!!謝謝! – AzzyDude
@AzzyDude現在關閉JavaScript(或在某個頁面上有javascript錯誤)。關閉瀏覽器。嘗試登錄。這不是一個糟糕的解決方案,但請記住,它不是100%可靠的,就像我在答案中所說的那樣。 –
是的,但如果JavaScript已關閉,我們會收到一條消息。他們不能打破我們的系統,他們的服務只是廢話。所以保持它的利益是符合他們的利益的。 – AzzyDude