保持ASP.NET会话打开/激活

保持ASP.NET会话打开/激活

只要用户打开浏览器窗口,哪种最简单、最不引人注意的方式可以使ASP.NET会话保持活动?它是定时的Ajax调用吗?我想防止以下情况:有时用户将窗口打开很长时间,然后输入一些内容,而提交则不再有效,因为服务器端会话过期了。我不想在服务器上增加超过10分钟的超时值,因为我希望关闭会话(通过关闭浏览器窗口)来快速超时。

建议代码样本?


aluckdog
浏览 405回答 3
3回答

侃侃尔雅

如果您正在使用ASP.NETMVC-您不需要额外的HTTP处理程序和web.config文件的一些修改。您所需要的只是在Home/公共控制器中添加一些简单的操作:[HttpPost]public JsonResult KeepSessionAlive() {     return new JsonResult {Data = "Success"};},编写一段类似于此的JavaScript代码(我已将其放入站点的一个JavaScript文件中):var keepSessionAlive = false;var keepSessionAliveUrl = null;function SetupSessionUpdater(actionUrl) {     keepSessionAliveUrl = actionUrl;     var container = $("#body");     container.mousemove(function () { keepSessionAlive = true; });     container.keydown(function () { keepSessionAlive = true; });     CheckToKeepSessionAlive();}function CheckToKeepSessionAlive() {     setTimeout("KeepSessionAlive()", 300000);}function KeepSessionAlive() {     if (keepSessionAlive && keepSessionAliveUrl != null) {         $.ajax({             type: "POST",             url: keepSessionAliveUrl,             success: function () { keepSessionAlive = false; }         });     }     CheckToKeepSessionAlive();},并通过调用JavaScript函数初始化此功能:SetupSessionUpdater('/Home/KeepSessionAlive');请注意!我只为授权用户实现了此功能(在大多数情况下,没有理由让来宾保持会话状态),而保持会话状态活动的决定不仅基于-是否打开浏览器,而且授权用户必须在站点上进行一些活动(移动鼠标或键入某个键)。

明月笑刀无情

每当您向服务器提出请求时,会话超时都会重置。因此,您只需对服务器上的空HTTP处理程序进行Ajax调用,但确保禁用处理程序的缓存,否则浏览器将缓存处理程序,不会发出新的请求。KeepSessionAlive.ashx.cspublic class KeepSessionAlive : IHttpHandler, IRequiresSessionState     {         public void ProcessRequest(HttpContext context)         {             context.Response.Cache.SetCacheability(HttpCacheability.NoCache);             context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));             context.Response.Cache.SetNoStore();             context.Response.Cache.SetNoServerCaching();         }     }.JS:window.onload = function () {         setInterval("KeepSessionAlive()", 60000)}  function KeepSessionAlive() {  url = "/KeepSessionAlive.ashx?";         var xmlHttp = new XMLHttpRequest();         xmlHttp.open("GET", url, true);         xmlHttp.send();         }@veggerby-不需要在会话中存储变量的开销。仅仅预先向服务器发送一个请求就足够了。
打开App,查看更多内容
随时随地看视频慕课网APP