簡體   English   中英

ASP.NET MVC:LogOut Heartbeat功能

[英]ASP.NET MVC: LogOut Heartbeat function

基本上我在用戶關閉他的標簽時尋找可靠的注銷機制。 這包括調用一些服務器代碼,因此所有客戶端只有刪除cookie的機制對我不起作用。

在互聯網上,你主要找到攔截window.unload函數的方法,然后在那里放置一些代碼。 我知道有可能過濾掉可能觸發window.unload其他事件的正常導航請求,但我一般不喜歡這種方法,因為我必須進行某種同步AJAX調用才能可靠地執行一些自定義在服務器上注銷代碼,這絕對不是實現我想要的最佳方式。

第二種方法是實現Heartbeat功能以定期檢查客戶端是否響應。 我認為這是我/我的方案的最佳方法,但我實際上正在努力與ASP.NET MVC的實現。

我將如何在ASP.NET MVC中處理此問題? 我已經想到了SignalR,但實際上並不能直接訪問SignalR上下文中的會話信息。

很容易找到一些奇特的實現(例如,參見這個問題 )。

對於基本的心跳實現,您將需要三個文件: HTML (發送節拍的網站頁面), 控制器 (接收節拍)和JavaScript文件(帶有心跳功能)。 您可以在HTML文件中包含JavaScript代碼,但最好將它保持分開。

在這里,您有我的工作示例的確切內容:

HTML文件(Heart.cshtml)

請注意,您需要包含JavaScript文件和jQuery。 @ Url.Action(“ReceiveHeartbeat”,“Auxiliary”)給出控制器(AuxiliaryController)中方法(ReceiveHeartbeat)的地址。

<head>
    <script type="text/javascript" src="~/Scripts/heartBeat.js"></script>
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>

<body>        
    <script type="text/javascript">
        LaunchHeartBeat('@Url.Action("ReceiveHeartbeat", "Auxiliary")');
    </script>
</body>

Javascript(heartBeat.js)

其他人使用setTimeout ,但是如果你想使用setTimeout的循環更干凈。 我建議使用setInterval(myFunction,myInterval)編寫兩個函數; (見下文)。 您可以向Ajax請求添加更多內容(例如, 成功:操作)。

function LaunchHeartBeat(actionUrl) {
    var intervalMilliseconds = 750;
    setInterval(function () {
        $.ajax({
            type: "POST",
            url: actionUrl
        });
    }, intervalMilliseconds);
}

控制器(AuxiliaryController.cs)

[HttpPost]
public JsonResult KeepSessionAlive()
{
    // You may do stuff here
    return new JsonResult { Data = "success" };
}

編輯 :Javascript文件的替代語法:

var actionUrl = null;
var intervalMilliseconds = 1000;

function LaunchHeartBeat(myUrl) {
    actionUrl = myUrl; 
    setInterval(HeartBeat, intervalMilliseconds); 
}

function HeartBeat() {
    $.ajax({
        type: "POST",
        url: actionUrl
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM