【问题标题】:How To log off a user when he is disconnected through the Web SignalR Hub?通过 Web SignalR Hub 断开连接时如何注销用户?
【发布时间】:2014-08-28 15:23:53
【问题描述】:

希望大家都好。 我正在使用 MVC C# 、 AspNet.Identities 并拥有一个功能齐全的帐户控制器。

我最近在项目中引入了一个基本的 SignalR 集线器,我想在用户与集线器断开连接后将其注销。我的想法是从 Account Controller 调用 LogOff 方法。

Hub 非常简单,事实上,如果我没记错的话,我是从 Scott Hanselman 的视频中截取的。只是 hitCounter 部分...现在我正在尝试添加 logoff() 功能。

这是我到目前为止所得到的。

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();

        return RedirectToAction("Welcome", "Home");
    }//this is in my account controller


[Authorize]
[HubName("hitCounter")]
public class GameplayHub : Hub
{
        private static int intCounter = 0;

        public void RecordHit()
        {
            intCounter += 1;
            this.Clients.All.onHitRecorded(intCounter);
        }

        public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
        {
            Final.Controllers.AccountController obj = new Final.Controllers.AccountController();
            intCounter -= 1;
            this.Clients.All.onHitRecorded(intCounter);
            this.Clients.Caller.onHitRecorded(obj.LogOff());
            obj.LogOff();

            return base.OnDisconnected(stopCalled);

        }

}//this is the hub


<div id="hitCount" style="font-size:50px;"></div>

<script src="~/Scripts/jquery-1.6.4.js"></script>
<script src="~/Scripts/jquery.signalR-2.1.1.js"></script>
<script src="/signalr/hubs"></script>

<script>
    $(function() {
        var con=$.hubConnection();
        var hub=con.createHubProxy('hitCounter');
        hub.on('onHitRecorded', function (i) {
            $('#hitCount').text(i);
        });
        con.start(function() {
            hub.invoke('recordHit');
        });
    })
</script>//My view...just shows how many people active at that point...

活动人数正确显示。我在我的应用程序中尝试做的是,如果用户在 2 个选项卡上,并且他关闭了一个,他必须在两个选项卡上都注销。

任何帮助将不胜感激!谢谢:)

【问题讨论】:

    标签: signalr


    【解决方案1】:

    不幸的是,它不会起作用。注销用户是通过删除必须由浏览器完成的 cookie 来完成的。 SignalR 在选项卡已关闭后运行断开连接的处理程序,因此您无法告诉浏览器删除 cookie。

    可行的解决方案是强制重定向到用户打开的第二个选项卡上的注销页面。

    伪代码:

    在 SignalR 集线器中:

    Task OnDisconnected()
    {
      var otherTab = FindOtherTabWithUser();
      otherTab.forceLogOff();
    }
    

    在 JavaScript 中:

    forceLogOff = function() { window.location.href = '/logoff'; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多