繁体   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