我想在会话超时之后让用户注销并在注销时我插入特定用户的值在他的标志中进行更改,就好像他的标志是1他已登录并且如果他的标志是0他退出所以我想在他退出时将标志值从1更改为0。
我的退出行动:
public ActionResult Logout(short? UserId12)
{
FormsAuthentication.SignOut();
//Session["UserName"] = null;
//Session["BranchCode"] = null;
//Session["GroupID"] = null;
USER_LOGIN obj = new USER_LOGIN();
obj = db.USER_LOGIN.Find(UserId12);
obj.LOGOUTFLAG = 0;
obj.LOGOUT_DATETIME = System.DateTime.Now;
db.SaveChanges();
Session.RemoveAll();
return RedirectToAction("Login", "Account");
}
我试图通过jquery将userid发送到行动来解决这个问题,但问题是用户ID是在会话中它会按时到期
<script>
var url= '@Url.Action("Logout", "Account", new { UserId12 = Session["UserId1"] })';
var sessTm = @Session.Timeout
sessTm = sessTm * 60;
sessTm = sessTm - 10;
function mTmout() {
sessTm -= 1;
if (sessTm == 0) {
window.location = url;
} else {
setTimeout(mTmout, 1000);
}
};
$(document).ready(function () {
$(".tmout").html(sessTm);
setTimeout(mTmout, 1000);
});
答案 0 :(得分:0)
尝试相反的情况,即登录应填充您的会话,当会话到期时,用户将自动显示已注销。
通过对应用程序或控制器进行过滤来检查登录的会话变量并重定向(如果它不存在)来执行此操作。
例如,在“App_Start”文件中使用FilterConfig.cs
进行应用范围覆盖:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.add(new LoginFilter());
}
}
LoginFilter:
public class LoginFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(HttpContext.Current.Session["IsLoggedIn"]==false) //or null
{
//redirect to login page
}
}
}
您需要为登录控制器实现此功能,以免获得无限重定向循环:Skip global filter