是否在会话超时后插入用户注销信息

本文关键字:插入 用户注销 信息 超时 会话 是否 | 更新日期: 2023-09-27 18:03:30

我想让用户在会话超时后注销,在注销时,我会在他的标志中插入特定用户的值进行更改,比如如果他的标志为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发送用户ID来解决这个问题,但问题是用户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);
    });

是否在会话超时后插入用户注销信息

尝试相反的方法,即登录应该填充您的会话,当会话到期时,用户将自动显示为已注销。

为此,在你的应用程序或控制器上设置一个过滤器,检查登录的会话变量,如果不存在,则重定向。

例如,使用"应用程序启动"文件中的FilterConfig.cs进行应用程序范围覆盖:

public class FilterConfig
{
   public static void RegisterGlobalFilters(GlobalFilterCollection filters)
   {
      filters.add(new LoginFilter());
   }
}

登录筛选器:

public class LoginFilter : ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
      if(HttpContext.Current.Session["IsLoggedIn"]==false) //or null
      {
         //redirect to login page
      }
   }
}

您需要为登录控制器实现这一点,这样您就不会得到无限的重定向循环:跳过全局过滤器