我已经登录并且需要5分钟后才需要显示一个引导模式弹出窗口,说明该会话已过期。再次登录。我在模式中有hava按钮,它将应用程序重定向到登录页面。实现它的最佳方法是什么?
答案 0 :(得分:0)
首先,你是混合术语,所以我们要明确:会话和身份验证是两个完全不同的事情。客户端可能具有活动会话,活动身份验证或两者兼有,并且每个客户端的超时可能不同。
此外,会话和身份验证使用不同的类型超时。会话超时正在滑动,并随每个请求重置。但是,身份验证超时是绝对,并且在定义的时间到期,无论用户是否正在使用该站点。
如果您严格谈论身份验证,那么最好的方法(或者至少是最准确的方式)是通过AJAX长期轮询经过身份验证的操作。例如:
public void onClientEventTrigger(Client sender, string name, object[] args)
{
if (name == "ATM_SELECTED")
{
int function = (int)args[0];
if (function == 0)
{
int money = database.playerDatabase.getBankAmount(sender);
if (money == 0)
{
sender.sendChatMessage("~y~[BANK]:~w~ Du hast kein Bank guthaben.");
}
else
{
sender.sendChatMessage("~y~[BANK]:~w~ Dein Bankguthaben beträgt: $" + money);
}
}
else if (function == 1)
{
int betrag = (int)args[1];
sender.sendChatMessage("~y~[BANK]:~w~ Betrag: " + betrag);
}
else if (function == 2)
{
sender.sendChatMessage("~y~[BANK]:~w~ Event 3 wurde getriggert");
}
else if (function == 3)
{
}
}
}
这里没有回报,因为你不需要它。如果用户仍然获得授权,您将获得200状态代码。如果没有,你将获得401.如果你得到401,那么你可以弹出你的模态并提示用户再次登录。
或者,您可以简单地保留客户端计时器。由于身份验证超时是登录后的固定时间,因此您只需查看登录过程所花费的时间,以查看身份验证是否仍然有效。要实现这一点,您需要将计时器存储在[Authorize]
public void ActionResult CheckAuthentication()
{
}
之类的内容中,以便它在请求之间保持不变,或者您需要以某种方式保留登录时间并计算剩余时间。
第一种方法更容易,但会产生不允许会话过期的副作用。每次检查身份验证状态时,都将重置会话超时。但是,您可以通过简单地将两者捆绑在一起并在每次登录时销毁会话来避免此问题。然后,他们将同时有效地“超时”。
第二种方法不会影响会话超时(因为它不涉及重复请求),但确实需要更多的工作来传递定时器或登录日期值。