自动会话超时iphone

我正在开发一个Iphone应用程序,我需要在后台本身执行自动注销,即在按下Home按钮之后。

我尝试了以下代码用于会话超时,适用于桌面。 但是这个解决方案在Iphone的后台不起作用,因为我必须等待完整的10秒才能重定向到所需的页面。

     $(document).ready(function(){ var wintimeout; function SetWinTimeout() {  wintimeout = window.setTimeout("window.location.href='try.html';",10000); //after 5 mins ie 5 * 60 * 1000  } $('body').click(function() { window.clearTimeout(wintimeout); //when user clicks remove timeout and reset it SetWinTimeout();  }); SetWinTimeout(); });     try link  Hey there.. is this working fine?   

有人可以为此提供解决方案吗?

此外,上述代码中的会话超时间隔未在Iphone上重置,因为即使我正在点击屏幕,我也被重定向到所需的页面。 我该如何解决这个问题?

iPhone Sdk在后台进入后5秒后挂起所有任务。 如果应用程序支持多任务处理(如音频播放位置更新),它将支持后台任务。 我可以为您提供一个解决方案,即节省您进入后台的时间,并节省前景时的时间。 如果计算的时间超过了注销的时间,那么请点击您想要的服务。

也许是这样的?

         try link  Hey there.. is this working fine?   

想法是计算自上次活动以来经过的时间。 当浏览器处于后台时,iOS设备暂停 JS,在我看来这是有充分理由的。

这样的事情怎么样…注意:我有几个可以用其他任何东西切换出来的MVC Razor片段。 我没有测试过这个,但这是一个好的开始。 非Safari iOS浏览器将忽略pageshow / pagehide事件处理程序,因此这不是移动设备的完整解决方案。 请随意改进这一点,以获得更广泛的跨浏览器function。 此外,此解决方案需要使用JQuery cookie插件: https : //github.com/carhartl/jquery-cookie

/////////客户端代码

  //Safari iOS example that could be further developed to handle other mobile browsers var sessTimeCutOffInMs = 600000; //600000 ms equals 10 minutes //Safari iOS event handler for resume tab and/or focus from sleep mode window.addEventListener("pageshow", function(e){ var timeIn = getTime(); var timeOut = $.cookie('timeOut'); if(timeOut != null) { //Let us compare compareTimes(timeIn,timeOut); } }, false); //Safari iOS event handler when creating new tab/app switching and/or putting into sleep mode window.addEventListener("pagehide", function(e){ var timeOut = getTime(); $.cookie('timeOut', timeOut, { path: '/' }); }, false); function getTime() { @{ //MVC Razor syntax //formatted as milliseconds since 01.01.1970 var _serverTime = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds.ToString("F0"); } var serverTime = @_serverTime; return serverTime; //return (new Date()).getTime(); } function compareTimes(timeIn,timeOut) { var diff = timeIn - timeOut; //If the mobile page was asleep for 10 minutes or more, force iOS user to logout //Especially useful for when forms auth is set to slidingExpiration=true if(diff >= sessTimeCutOffInMs) { //Redirect to logout routine //MVC Razor code shown below for redirecting to my Home Controller/Action simpleReset('@(Html.ResolveUrl("~/Home/SignOut"))'); } } function simpleReset(url) { window.location.href = url; } 

///////////// MVC 4 HomeController.cs SignOut()Action的代码片段

  [AllowAnonymous] public ActionResult SignOut() { try { ViewBag.Message = "You are signed out."; //DELETE SSO Cookie HttpCookie ssoCookie = new HttpCookie("SMSESSION", "NO"); ssoCookie.Expires = DateTime.Now.AddYears(-1); ssoCookie.Domain = ".myDomain.com"; //IMPORTANT: you must supply the domain here Response.Cookies.Add(ssoCookie); //Look for an existing authorization cookie and kill it HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; authCookie.Value = null; authCookie = null; Response.Cookies.Remove(FormsAuthentication.FormsCookieName); // clear authentication cookie //Overriding the existing FormsAuthentication cookie with a new empty cookie ensures //that even if the client winds back their system clock, they will still not be able //to retrieve any user data from the cookie HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, ""); cookie1.Path = FormsAuthentication.FormsCookiePath; cookie1.Expires = DateTime.Now.AddYears(-1); cookie1.HttpOnly = true; Response.Cookies.Add(cookie1); // clear session cookie HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", ""); cookie2.Expires = DateTime.Now.AddYears(-1); Response.Cookies.Add(cookie2); //Explicitly destroy roles object and session SimpleSessionHandler.myRoles = null; Session.Clear(); Session.Abandon(); // Invalidate the Cache on the Client Side Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); FormsAuthentication.SignOut(); } catch (Exception ex) { //Swallow it Log.LogError("AUTH COOKIE ERROR: " + ex.Message, ex); } //The loginUrl on IWH is actually a LOGOUT page for the SSO cookie return Redirect(FormsAuthentication.LoginUrl); }