2016-08-23 71 views
0

我想在会话超时和注销后让用户注销我插入该特定用户的值在他的国旗中进行更改,就像他的国旗是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); 
    }); 

回答

0

尝试相反,那就是登录应该填充你的会话,当会话过期时,用户会自动出现登出。

通过在您的应用程序或控制器上进行筛选来检查登录的会话变量并在不存在的情况下重定向。

例如使用FilterConfig.cs在“App_Start”文件应用覆盖面广:

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