我正在和另外 4 个人一起做一个小组项目。我们正在使用嵌入式 c# 在 MVC4 中的 ASP.NET 中设计一个工作亭。
我正在努力让系统在用户空闲 10 分钟时将其注销。我需要一些关于如何开始编写系统以注销用户的方法的帮助。
我正在和另外 4 个人一起做一个小组项目。我们正在使用嵌入式 c# 在 MVC4 中的 ASP.NET 中设计一个工作亭。
我正在努力让系统在用户空闲 10 分钟时将其注销。我需要一些关于如何开始编写系统以注销用户的方法的帮助。
如果您不使用“Windows 身份验证”,这至少取决于您可以通过 web.config 控制的会话超时:
<configuration>
<system.web>
<sessionState timeout="10" />
</system.web>
</configuration>
由于大多数技术以某种方式依赖于会话,因此这在大多数情况下都有效。
您正在寻找的答案是 AliK 建议的答案。您想在 web.config 中设置自动超时,以便在一定的空闲时间后自动注销用户并将其重定向到登录页面。
<authentication mode="Forms">
<forms loginUrl="Login.aspx" protection="All" timeout="1" slidingExpiration="true">
</forms>
</authentication>
如果我没记错的话,超时值以分钟为单位,而不是秒或毫秒。此外,滑动到期意味着每次您在网站上执行操作时都会重置超时。因此,如果您有 5 分钟的超时,并且在单击站点上的按钮之前闲置了 4 分钟,那么在单击按钮后,您将获得新的 5 分钟超时。
如果您使用 FormsAuthentication,我会这样做:
控制器动作:
public ActionResult CheckLogin()
{
if (Request.Cookies["CookieName"] == null) return Json(0, JsonRequestBehavior.AllowGet);
var cookie = Request.Cookies["CookieName"].Value;
var ticket = FormsAuthentication.Decrypt(cookie);
var secondsRemaining = Math.Round((ticket.Expiration - DateTime.Now).TotalSeconds, 0);
return Json(secondsRemaining, JsonRequestBehavior.AllowGet);
}
每个页面或布局页面上的 Jquery:
<script>
$(function () {
setTimeout(doStuff, 1000);
});
function doStuff() {
$.ajax("/CheckLogin").done(function (data) {
if (data <= 60) {
startLogout(data);
} else {
setTimeout(doStuff, 1000);
}
});
}
function startLogout(seconds) {
var countdown = setInterval(function () {
//Show something here
if (count == 0) {
clearInterval(countdown);
//Do something here
}
seconds--;
}, 1000);
}
</script>
如果您需要让他们自动注销,请从 Linus Caldwell 的设置 web.config 会话超时的建议开始。他的示例显示 30 分钟,因此您只需将其更改为 10 分钟。但是,用户不会知道他们已注销,直到他们实际尝试请求某些服务器资源。要让这种情况自动发生,您可以采取多种方式。这两种方式都涉及在超时期限到期后自动刷新页面。一种方法是使用 javascript 计时器。另一种是为每个页面添加一个刷新标题。
<script type="text/javascript">
var seconds = 60 * 11;// set timer for 11 minutes (1 minutes after session expires)
countdown();
function countdown(){
seconds--;
if (seconds <= 0){
window.location.reload(); // force a refresh.
}else{
setTimeout('countdown()', 1000);
}
}
</script>
另一种方法是在你的 global.asax 中:
protected void Application_BeginRequest()
{
Response.Headers.Add("Refresh", Convert.ToString(Session.Timeout * 11));
}