首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使ASP.NET会话保持打开/活动状态

使ASP.NET会话保持打开/活动状态
EN

Stack Overflow用户
提问于 2009-09-16 08:40:43
回答 7查看 129.2K关注 0票数 124

在用户打开浏览器窗口的情况下,保持ASP.NET会话活动的最简单、最容易的方法是什么?它是定时AJAX调用吗?我想防止以下情况:有时用户长时间打开他们的窗口,然后输入内容,然后提交时,由于服务器端会话过期,什么都不起作用。我不想在服务器上增加超过10分钟的超时值,因为我希望关闭的会话(通过关闭浏览器窗口)快速超时。

建议,代码示例?

EN

回答 7

Stack Overflow用户

发布于 2013-10-21 17:15:44

每当您向服务器发出请求时,会话超时都会重置。因此,您可以只对服务器上的空HTTP处理程序进行ajax调用,但要确保禁用该处理程序的缓存,否则浏览器将缓存您的处理程序,而不会发出新的请求。

KeepSessionAlive.ashx.cs

代码语言:javascript
复制
public 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:

代码语言:javascript
复制
window.onload = function () {
        setInterval("KeepSessionAlive()", 60000)
}

 function KeepSessionAlive() {
 url = "/KeepSessionAlive.ashx?";
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", url, true);
        xmlHttp.send();
        }

@veggerby -不需要在会话中存储变量的开销。只需预先向服务器发出请求就足够了。

票数 9
EN

Stack Overflow用户

发布于 2009-09-16 16:20:28

您真的需要保留会话吗(其中有数据吗?)或者,当请求进入时,通过重新实例化会话来伪造这一点是否足够?如果是第一种情况,请使用上面的方法。如果是第二种情况,请尝试使用Session_End事件处理程序。

如果您有表单身份验证,那么在Global.asax.cs中就会得到如下内容

代码语言:javascript
复制
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(formsCookie.Value);
if (ticket.Expired)
{
    Request.Cookies.Remove(FormsAuthentication.FormsCookieName);
    FormsAuthentication.SignOut();
    ...             
     }
else
{   ...
    // renew ticket if old
    ticket = FormsAuthentication.RenewTicketIfOld(ticket);
    ...
     }

并且您将票证生存期设置得比会话生存期长得多。如果您没有进行身份验证,或者使用不同的身份验证方法,则有类似的技巧。微软的TFS web界面和SharePoint似乎都在使用它们--如果你点击一个陈旧页面上的链接,你会在弹出窗口中得到认证提示,但如果你只使用一个命令,它就能工作。

票数 2
EN

Stack Overflow用户

发布于 2016-05-05 14:53:38

你可以把这段代码写进你的java脚本文件,就是这样。

代码语言:javascript
复制
$(document).ready(function () {
        var delay = (20-1)*60*1000;
        window.setInterval(function () {
            var url = 'put the url of some Dummy page';
            $.get(url);                
        }, delay);
});

(20-1)*60*1000是刷新时间,它将刷新会话超时。刷新超时按iis默认超时= 20分钟计算,即20×60000 = 1200000毫秒- 60000毫秒(会话到期前1分钟)为1140000。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1431733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档