【问题标题】:How to detect when users are logout with Session timeout?如何检测用户何时退出会话超时?
【发布时间】:2018-12-13 10:51:04
【问题描述】:

我正在实现网络推送通知,它工作正常,除了会话超时的一个问题。在我们的网站上,用户将在 Session 过期后退出。但是,当时用户可能已经关闭了选项卡/浏览器。 如何检测 Session 过期的时间,以便我可以停止向该用户发送通知。

更新: 我的会话将在 30 分钟后过期(会话状态超时 =“30”)。用户登录,然后在不注销的情况下关闭选项卡; 30 分钟后,他将退出。但他仍然收到通知。

【问题讨论】:

  • 我认为你不必担心这个。当访问者返回页面时,推送服务器中存储的通知将被传递。
  • @PepitoSh:谢谢,但是 Web 推送在 Service Worker 中运行,因此一旦用户打开浏览器,就会弹出通知。然后单击 webpush 通知将定向到 web,但由于用户尚未登录,它将重定向到登录页面。
  • 但是你的问题是另外一回事:如何在用户点击通知时自动登录。这个问题有解决办法。
  • @PepitoSh:所以我的意思是在会话过期之后(这意味着用户已经有效注销),我不希望 webpush 向这个端点/浏览器发送网络推送通知了。有可能吗?
  • 我不会将会话超时与注销混为一谈。会话由服务器端的对象表示。何时以及如何销毁此对象取决于您:超时后或显式注销后。如果您没有关于用户关闭窗口的信息,您只能在超时后使会话无效。现在,在浏览器关闭和您在黑暗中拍摄的实际超时之间。您要么必须检测浏览器关闭(几乎不可能),要么必须在下一个会话开始时恢复。

标签: c# asp.net session web-push


【解决方案1】:

我的建议是,

  1. 保存用户名或任何标识到会话变量,最后当点击注销时杀死会话变量。

  2. 另一个选项是 ASP.NET 中的 TempData,它存储下一页的值。首先检查该变量,然后授予对组件的访问权限。

http://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc

当页面关闭时,tempdata 会自动终止。

希望这会有所帮助。 谢谢。

【讨论】:

  • OP 的问题不在于用户故意注销。 OP 不想在浏览器窗口关闭时发送通知 - 无需注销。
  • 是的,我想在会话过期时停止发送 webpush 通知(如果用户单击注销按钮,那么这应该不是问题)。谢谢。
【解决方案2】:

我不确定这是否是答案,但也许它可以帮助你。

首先,您可以在用户会话结束时收到一个事件。因此,在这种情况下,您可以结束推送通知。

要实现这一点,只需将以下代码行添加到您的 Global.asax

    protected void Session_End(object sender, EventArgs e)
    {
       //End push notification
    }

要实现您注意到用户关闭浏览器或点击您需要一些 javascript。在我的示例中,我使用 HTTP-Request 执行此操作,但您也可以使用一些 Sockets 或其他所有方式执行此操作。

    function SendPostRequest(eMail) {
    try {
        $.post(
            "/apiacc/sessionend",
            { Value: eMail },
            function (data, status, xhr) {
            }
        );
    } catch (error) {
        //Error catching
    }
}

    function SetInterval(eMail) {
        SendPostRequest(eMail);
        window.setInterval(() => { SendPostRequest(eMail); }, 300000);
    }

我只是在加载网站时启动该功能。因此 JavaScript 每 5 分钟发送一次请求。我将其保存在数据库中(例如,我使用电子邮件地址进行授权)。在您的应用程序启动时,您创建一个后台任务。如果某些会话在最后 5 分钟内没有接到电话,它将每 5 分钟检查一次。因此,您可以结束会话,并且将调用 global.asax 中的事件。

我希望这有帮助吗?

【讨论】:

  • 谢谢@Darem,我通过 Session_End 的建议解决了这个问题:3
  • @ManhQuang 欢迎您。当它对您有用时,请将其标记为正确的 anwser :)
猜你喜欢
  • 2010-11-26
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 2013-11-05
  • 2017-07-21
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多