c# - 如何检测用户何时退出会话超时?
问题描述
我正在实现网络推送通知,它工作正常,除了会话超时的一个问题。在我们的网站上,用户将在 Session 过期后退出。但是,当时用户可能已经关闭了选项卡/浏览器。如何检测 Session 过期的时间,以便我可以停止向该用户发送通知。
更新: 我的会话将在 30 分钟后过期(会话状态超时 =“30”)。用户登录,然后在不注销的情况下关闭选项卡;30 分钟后,他将退出。但他仍然收到通知。
解决方案
我不完全确定这是否是答案,但也许它可以帮助你。
首先,当用户会话结束时,您可以获得一个事件。因此,在这种情况下,您可以结束推送通知。
要实现这一点,只需将以下代码行添加到您的 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 分钟发送一次请求。我将其保存在数据库中(例如,我使用电子邮件地址进行授权)。在您的应用程序启动时,您创建一个后台任务。如果某些会话在最后 5 分钟内没有接到电话,它将每 5 分钟检查一次。因此,您可以结束会话,并且将调用 global.asax 中的事件。
我希望这有帮助吗?
推荐阅读
- database - 如何将 Oracle DB 版本从 11.2.0.1.0 更新到 11.2.0.2.0?
- javascript - 您如何设计和实现应用程序范围的事件检测机制来捕获大型 Angular 应用程序中的点击事件?
- python - Xlsxwriter 什么都不做,但没有错误消息
- azure - 有没有办法为在 Azure 函数中执行的 docker run 命令指定自定义参数
- apache-spark - 如何在 Databricks 中迭代以读取存储在数据湖不同子目录中的数百个文件?
- python - 如何处理 div 类型的下拉菜单,而不是在 selenium/python 中选择
- pandas - 数据框python从年,月,日转换为工作日
- java - 在 MapStruct 中转换为相同的子对象
- reactjs - Reactstrap 输入验证错误。需要帮助
- javascript - 没有从reactjs中的输入字段编辑值