我正在实现网络推送通知,除了会话超时的一个问题外,它工作正常。在我们的网站上,会话过期后用户将被注销。但是,那时用户可能已经关闭了选项卡/浏览器。 如何检测会话过期的时间,以便停止向该用户发送通知。
更新: 我拥有的会话将在30分钟后过期(sessionState超时=“ 30”)。用户登录,然后关闭选项卡而不注销; 30分钟后,他将退出。但是他仍然收到通知。
答案 0 :(得分:1)
我不确定这是否是答案,但也许可以帮到您。
首先,当用户会话结束时,您可以获取一个事件。因此,在这种情况下,您可以结束推送通知。
要实现此目的,只需将以下代码行添加到Global.asax
protected void Session_End(object sender, EventArgs e)
{
//End push notification
}
为使您注意到用户关闭浏览器或点击,您需要一些JavaScript。在我的示例中,我使用HTTP请求来执行此操作,但是您也可以使用某些套接字或其他操作来执行此操作。
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分钟发送一次请求。我将其保存在数据库中(例如,我使用E-Mailadress进行授权)。在应用程序启动时,您将创建一个后台任务。这将每隔5分钟检查一次会话中的某些会话是否在最近5分钟内没有接到电话。因此,您可以结束会话并在global.asax中调用该事件。
我希望有帮助吗?
答案 1 :(得分:0)
我的建议是
将用户名或任何标识保存到会话变量中,最后单击“注销”,杀死会话变量。
另一个选项是ASP.NET中的TempData,它存储下一页的值。首先检查该变量,然后再授予对组件的访问权限。
http://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc
当页面关闭时,tempdata将自动终止。
希望这会有所帮助。 谢谢。